Matcha
293
2019-09-06 00:26:32
14
2104

OS를 직접 만드는 게 가능할까요?


안녕하세요 지금 소프트웨어 학과 5개월차 신입입니다.


질문 드리기 전에 제 소개를 잠깐 먼저 하겠습니다.


학교 처음 학기에 학교에서 자바를 배웠습니다. 근데 한 학기 과정이 독학으로 일주일만에 끝낼 수 있을 정도로 단순했습니다.(학점을 포기한 건 아닙니다.)


학교 공부를 그다지 열심히 안 해도 좋은 성적을 받을 수 있을 것 같아서 학교에서는 자바를 배우면서  PHP, Python, C 언어의 특징만 대충 훑어봤습니다.(언어의 특징과 용도만 정확히 알면 나머지는 알고리즘 문제인 것 같아서 맛보기로만 훑어봤습니다.)


그러다 보안쪽으로 관심이 생겨서 약 1개월동안 간단한 웹 해킹, 네트워크 소켓, 패킷 분석, 간단한 해킹 기법등을 공부해봤고 현재는 시스템 해킹쪽을 메인으로 삼아서 깊게 공부하고 있습니다.(어셈블리, OS, 리버싱, 간단한 CTF 등등)


그러다가 문득 아직까지 제대로 된 코딩을 해본 적이 없다는 생각을 했습니다. 학교 조별과제는 기껏해야 몇백줄이고 깃허브에 올라와있는 비기너를 위한 프로젝트 코드를 봐도 전혀 이해가 안되는 수준입니다. (사실 이 부분에 대해서는 아직도 의문입니다. 분명 비기너를 위한 자바 프로젝트라고 해서 들어갔는데 제가 아는 자바의 형태는 없었습니다...)


시스템쪽을 깊이 들어갈 수록 프로그래밍이 점점 더 중요해진다는 게 실감이 되면서 '내가 OS를 직접 만들어보면 어떨까?' 하는 생각이 들었습니다.


아직 OS 공부를 시작했다고 말하기도 부끄러울 만큼 지식이 없는 상황이어서 파일 압축 프로그램 같은 실용적인 것들을 만들어보면서 실력을 키우려고 합니다.


제가 다니는 대학은 외국 대학이라서 3년제 입니다. 계산해보면 2년 6개월이라는 시간이 남았는데 그 때까지 정말정말 간단한 OS라고 부르기에도 부끄러운 다 무너져가는 OS 비스무리 한 걸 하나 만들 수 있을까요?


긴 글 읽어주셔서 감사합니다.

0
  • 댓글 14

  • 멘탈조각
    1k
    2019-09-06 00:35:13

    OS 개발 튜토리얼 북 찾아보면 꽤 있습니다.

    전 고등학생때 그런 책 읽고 대학갈때 활용했습니다.

  • rlqnsdl
    196
    2019-09-06 00:35:22
    리눅스 초창기 버전이 1000줄짜리 코드였다는걸 어디서 얼핏 본 기억이...ㅎㅎ
  • StringBuilder덕후
    1k
    2019-09-06 00:36:23

    우분투 돌려서 안드로이드 풀 소스 받으셔서 빌드 해보고 한줄씩 이해해 보시길...

  • 방가방가2
    1k
    2019-09-06 00:52:06

    욕심만 버린다면 생각보다 그렇게 어렵지 않습니다. 

  • 아범테크
    580
    2019-09-06 02:00:47 작성 2019-09-06 02:05:56 수정됨

    꼭 굳이 만드려고 하시나요?

    경험을 쌓고 싶으시면 OS 혼자서 만드시는 것 보다 지금 있는 OS에 기여해보시는 것이 훨씬 더 좋을 방법일 수 있습니다. 오픈소스 개발 프로세스도 익힐 수 있고 해당 OS개발 논의들, 코딩 방향들을 뒤적거리면서 뭔가 배울 점도 많고요.

    어느정도의 로우레벨부터 개발하시려는지 모르겠지만...요즘 운영체제 개발은 "이론"보다는 당장 "하드웨어 드라이버" 만드는게 제일 문제입니다. 당장 PC쪽에서는 x86 구조부터 하드디스크 접근하려면 SATA 드라이버 만들어야 하고...이런것들 하려면 혼자서는 3~4년 내에는 절대 무리입니다. 리눅스 창시자가 대학생때 뚝딱만들던 시절보다 하드웨어는 비교도 안되게 복잡해졌습니다. 그래서 하드웨어 드라이버 개발 부담을 덜기 위해 리눅스 커널이라는게 있죠.

    대신 리눅스 커널 기반으로 하시려면 우분투 그런거 보다 Linux From Scratch 라는 리눅스 배포판 한번 만져보시는것 추천해 드립니다 ㅎ 그리고 운영체제 개발에서 유명한 사이트로는 OSDev https://wiki.osdev.org 가 있습니다. 유용한 정보 굉장히 많아요.


    PC급 운영체제 말고 좀 더 눈높이를 낮추시면 임베디드용/IoT용 OS (실시간운영체제라고 합니다) 쪽에 눈을 돌려보시면 OS개발에 기여하실 수 있는 기회가 좀 있어요, 왜냐면 IoT가 뜨면서 그거 전용 작은 OS들이 태어난지 오래 안됬거든요. Zephyr OS, RIOT OS, mynewt 등등이요. 이쪽은 해당 임베디드 칩셋을 (ARM기반 마이크로컨트롤러) 를 공부 많이 하셔야하지만...개인적으로 RIOT OS개발에 기여한 적이 있습니다. 참고로 우리나라는 모르겠지만 미국에서는 IoT기기들 해킹해서 취약점 발견/연구 하는 회사들 몇개 있습니다.


  • mirheeoj
    12k
    2019-09-06 06:28:04

    무너져가는 걸 만들 필요도 없어요. 그냥 작고 간단하고 단순한 걸 만들면 됩니다.

    얼마든지 할 수 있음 

  • 고고씽~
    430
    2019-09-06 08:39:04

    Lisp, 컴파일러 먼저


  • mirr
    136
    2019-09-06 09:15:49

    OS 개발자가 자바개발자보다 우월하고 그런건 아닙니다.

    자바 교육과정이 쉽다고 하셨는데 자바는 처음 접근할대는 쉽게 느껴지는 면이 있지만 깊이 들어가면 (개인적으로는)C/C++보다 난이도가 높은면이 있다고 생각합니다.

    개발언어는 그 특징을 파악하는것도 중요하지만 그 개발언어가 사용할수 있는 프레임워크 같은 라이브러리들이 더 방대하고 중요합니다. 자바/파이선같은 고급언어들의 특징은 사용할수 있는 라이브러리가 엄청나게 방대하다는것이죠. C++만해도 C++언어자체를 안다고해서 MFC를 할수 있는게 아니죠. 수박겉을 핥아보고 이게 맛이 없다고 하는 격인거죠. 


    시스템프로그래밍에 관심이 가는건 본인적성이 그쪽이 좀더 맞는다고 할수도 있겠지만 튜토리얼같은 자바 교과정만보고 자바같은 언어를 쉽게 보는건 위험한것 같네요. ^^


    OS같은걸 만들고 싶다면 아두이노같은 임베디드 단말쪽을 접해보는것도 괜찮다고 봅니다. 컴퓨터전공이면 교과중에 있을수도 있고요. 개인적으로는 시스템프로그래밍쪽도 해보는것도 좋지만 좀더 유저친화적인쪽 ( 웹/모바일/GUI 프로그램들 ) 도 접해보는걸 추천드립니다. 


    의욕이 많으신것 같아서 좋아보이지만 얕은 지식을 다른 영역을 쉽게 보는건 안좋은 측면이 있습니다. 자바같은 언어는 산업생태계 특성상 생산성이 극대화된 언어이니 그러한 언어적 특성도 이해하는것이 좋습니다. 

  • 만년코더
    8k
    2019-09-06 10:02:58

    어느 분야든 파고들면 깊습니다...얕아보이는건 내 지식이 그 수준이라서 그래요..

  • 밀수나라
    1k
    2019-09-06 10:15:58
    보안이니 주변장치니 그런거 생각안하고 당장 dos 수준의 os를 만든다고 생각하고 스터디 하는것도 나쁘지 않죠. 그렇게 계속 발전해 나가는거니깐요
    -1
  • Matcha
    293
    2019-09-06 10:28:43

    멘탈조각 rlqnsdl StringBuilder덕후 방가방가2 아범테크 mirheeoj 고고씽~ mirr 만년코더 밀수나라


    이렇게 어리숙한 질문에 많은 관심 주셔서 다들 정말 감사합니다. 역시 질문 올리길 잘한 거 같아요 하하


    한 마디만 더 덧붙이자면 저는 절대 자바나 다른 언어를 얕게 보고 무시하는 마음이 없습니다. 제가 자바를 얕게 배우고 다른 언어로 넘어간 거는 아직 제 수준이 딱 그정도이기 때문이죠.


    저는 절대 프로그래밍 언어를 쉽게 생각하지 않습니다. 혹시 그 부분이 불편하셨다면 진심으로 사과드리겠습니다..

  • mirr
    136
    2019-09-06 10:43:32

    @Matcha

    자바나 다른 언어를 무시한다라는 의미로 댓글을 단건 아니고 네트워크,OS같은 영역을 고급기술영역, 자바같은 영역을 단순기술영역으로 인식하신것 같은 느낌이 들어서 댓글을 달았습니다.

    저도 좀 오해할만하게 댓글을 썼네요. 죄송합니다. 


    하나더 적자면 언어특징만 파악하면 나머지는 알고리즘 문제라하였는데 전 좀 생각이 다르네요.

    알고리즘은 코어로직 개발자가 아니면 어느정도 지식만 알고 있으면 되는것 ( 예를 들면 큐와 스택의 차이, 사용법 같은것 ) 이지 그걸 직접 구현할 기술을 가지고 있어야 하는건 아니라고 생각합니다. 

    못을 박기위해서 망치를 사용할수 있으면 되는것이지 망치를 만들수 있어야 하는건 아닌것 처럼요. 

    알고리즘수준에서 코어기술에 대해서 지식이 있으면 도움이 많이 되는건 맞지만 현재시점에서 개발자에게 필요한 것은 그것보다는 어떤 일을 할때 어떤 도구를 사용하는것이 적합한지 아는것이 아닐까 생각합니다. 


    의욕이 많은건 재능이 있으시단거고 언어 습득 속도도 빠르신것 같은데 이제 시작하시는 시점이라 어느 한쪽 분야에 깊이 들어가는것도 나쁘지는 않지만 자기가 원하는 분야를 좀더 경험해보는것이 좀더 좋다고 생각합니다. 시스템 엔지니어로서는 시스템과 연동을 재미있어하지만 좀더 사용자 친화적인 개발분야에서는 전혀 다른 경험을 하실수 있을테니까요. 

  • Matcha
    293
    2019-09-06 11:03:15

    mirr


    글 한줄한줄 읽을 때마다 제가 뭐 잘못한 게 있는 것 같아서 가슴이 엄청 빨리 뛰네요 ㅋㅋㅋ


    귀한 시간 내주셔서 조언 남겨주셔서 정말 감사드립니다. 하나하나 허투루 받아들이지 않고 꼼꼼히 읽어보고 연구하고 생각해보겠습니다!

  • 로직X
    547
    2019-09-06 11:23:02 작성 2019-09-06 11:23:17 수정됨

    만들수 있죠~! 기본지식은 공룡책 추천드림 ㅎㅎ 단 졸라 두껍고 지루함...

  • 로그인을 하시면 댓글을 등록할 수 있습니다.