커널 해커들은 대체 어떻게 공부하였을까?

geekforum의 이미지

이건 토론이라고 하긴 좀 그런 주제인데..-_-
개인적으로 너무나 궁굼해서 올려봅니다 혹시 아시는분 있으시면 알까 해서요.
리누스 토발쯔, 앨런 콕스, 그외 디바이스 개발자들..
정말이지 말이 소스가 공개되서 누구나 개발할수 있는 리눅스커널이지..
과연 그 커널소스코드에 손댈만한 실력을 가진 사람이 몇이나
될까요? 전세계를 통틀어서 1000명이나 될까요?? 많나?-_-
저도 공부 좀 해볼라고 모니터 뚜러지게 보긴 했슴니다만,
정말 뻥안치고 어느 한 부분의 함수 루틴조차도 이해할수가
없더군요... 엄청난 수학적 알고리즘과 과학적 지식없이는
분석조차도 불가능하였습니다. 일반 어플리케이션 소스코드가
아니라서 수학적인 계산루틴이 상당히 많더군요..-_-
무슨 행렬과 삼각함수같은 것들 등..-_-;
보통사람으로썬 천재가 아닌한 불가능 한거 같던데..
그런 사람들은 대체 어떻게 공부하였으며 백만라인도 넘는 코드를
어떻게 보는 것일까요? 아무리 나눠서 관리한다지만..
커널의 특성상 유기적으로 돌아가는 것인데..
전체적인 이해 없이는 절대 부분도 손대지 못한단건데..
거참 커널 해커가 될려고 하지만 그런 고수분들을 볼때
자괴감마저 느껴지며, 정말 난 바보인가.. 대체 난 뭐란 말인가..
하는 감정에 심하면 죽고싶어 집니다. -_-

여러분은 어떻습니까?

익명 사용자의 이미지

저의 기본적인 생각은 다른 사람들의 의견과 별 차이는
없습니다. 결국은 기초에 충실해야 하고요..

그 다음에는 기회를 만드는 것이 중요하겠지요.

어떤분이 Justification에 대해서 이야기
했는데~ 이부분이 정말 중요하지만 힘든 부분중에 하나지요.

비단 운영체제만이 아니라 다른 시스템을
만들더라도 이런문제는 항상 걸리는 것이라고

생각 됩니다.

그리고 다른 사람과 Co-Works 할수 있는 능력~
이런것들이 커다란 시스템을 만드는데에는 더 중요하다고
봅니다. 구성원들은 한데 모을수 있는

능력~ 다른 사람의 의견도 존중할 수 있는 능력~
이런것은 부수적이라고 생각될지 모르지만.

빠질수 없는 부분이죠~

암튼 기초에 충실하시고, 차근차근 수순을 밟아 나가면 됩니다.

익명 사용자의 이미지

커널 해커가 하는 일이 몇가지로 분류됩니다.

- 디바이스 드라이버 프로그래밍
- 파일시스템 프로그래밍
- 네트웍 프로그래밍
- 커널 코어 프로그래밍

1. 디바이스 드라이버

리눅스 코드가 100만줄인데 그걸 언제 다보나 걱정하셨는데 다볼 필요는
없습니다. 그중 60만줄이 디바이스 드라이버 소스코드입니다.
그 다음으로 큰것이 커널 코어, 네트웍, 파일시스템 등입니다.

디바이스 드라이버만 짤줄 알면 리눅스 커널의 반 이상을 수월하게 별로
부담 느끼지 않고 소스를 볼수 있습니다.

따라서 커널 해커로 입문하려면 디바이스 드라이버를 작성하는것이 가장
정석입니다.

필요한 지식은,
- C, 어셈블리 프로그래밍 능력
- OS 개론에 대한 지식
- 자신이 드라이버를 작성하려는 하드웨어에 대한 지식

위 몇가지만 있으면, 나머지는 책을 보고 배우거나 소스를 보고 배우며
시작할수 있습니다.

완전히 새로운 하드웨어의 디바이스 드라이버를 만들 필요도 없습니다.
기존에 있는 소스를 읽고 분석한 뒤에 알고리듬 중에 좋지 않은 부분이
있다거나, 성능을 개선할수 있는점이나, 코드의 구조를 깔끔하게 만들수
있는 부분이 있다거나 하는 것을 찾으면 됩니다.

디바이스 드라이버를 짜는것이 가장 자신의 코드를 리눅스 커널 배포본에
포함시켜서 오픈소스 사회에 공헌할 수 있는 가장 쉬운 길이자 빠른길
입니다. 다른것이 힘든 이유는 및에 설명을...

코드의 사이즈도 개인이 혼자 하기게 딱 적합합니다.

이보다 더 커서 여럿이 하려면, 회사에서 프로젝트로 하거나, 오픈소스
프로젝트를 해야 하는데 운이 좋아 리눅스를 하는 회사에 들어가면
다행이구요. 오픈소스 프로젝트는 자신이 운영하기에는 부담도 많이
되고, 오버헤드도 커지구요, 다른 사람들이 하는 오픈소스 프로젝트는
비집고 끼어들어가서 자신이 원하는 일을 하기가 힘듭니다.

그런데 아무래도 하드웨어를 다뤄야 하는 특성상 개발장비등이 필요할
수도 있으니 개인적으로 하기에는 부적합한 디바이스 드라이버가 있을수
있겠죠.

2. 파일 시스템

파일 시스템에 대한 정보도 좋은 책 몇권사서 보면 대략 감이 잡힐것
입니다. 파일시스템 소스의 양이 많은것도 이것저것 종류가 많아서
합치면 큰것이지 하나를 골라서 소스를 분석하기 시작하면 생각보다
많지 않을것입니다.

필요한 지식은
- C 프로그래밍 능력
뿐입니다.

나머지는 관련서적을 사서보면 됩니다. 특별한 하드웨어에 대해 알아야
하는것도 아니고, 프로토콜 스펙을 봐야 하는것도 아니고요. OS 이론에
대해 많이 알아야 하는것도 아니죠. 상대적으로 쉽게 손을 댈수 있는
분야지만요...

보통 쓸만한 파일 시스템은 개인이 만들기에는 좀 덩치가 큽니다.
따라서 자신이 파일시스템을 디자인하고 구현하기는 좀 힘들다 봅니다.
입문하는 방법은 특별히 쓸모는 없지만 아주 간단한 파일시스템을
만들거나, 현재있는 파일시스템을 약간씩 손봐서 변경하는것입니다.

3. 네트웍

여기서 네트웍이라 함은 네트웍 디바이스 드라이버가 아니고 네트웍
스택의 프로그래밍입니다. 제가 직접 해본게 없어서 뭐라 자세한 말을
못하겠군요.

- C 프로그래밍 능력
- 프로토콜에 대한 지식
등이 필요하지 않을까 싶습니다.

4. 커널 코어

이것은 다른 칩으로의 리눅스 포팅이 아니면 정말 시작하기도 힘들고,
나중에 코드를 리눅스 배포본에 넣기도 힘들것 같습니다. 리눅스 커널에
공헌하려면 지금까지 만들어지지 않은것을 만들거나(디바이스 드라이버)
아니면 자신의 코드가 지금 있는 코드보다 디자인/구현면에서 훨씬
나아서 바꿔야 한다는 justification 이 있어야 하는데, 커널코어에서
그런것을 찾아낸다는게 좀 힘들것같구요. 설령 찾아내서 고친다 하더라도
보수적인 리눅스 사도들을 설득하기가 더 힘들것 같습니다. 커널코어의
소스수정은 몇몇 특권층만의 권리라고 봅니다.

만약 이런것을 계획중이라면, 건투를 빕니다. 행운도 필요하겠네요.

참... 위에서 언급하지 않은것중에요.
뭐하든지 영어는 잘해야 될거 같습니다. 책이나 RFC 나 스펙이나 뭘
보더라도 별로 오래 막히지 않고 볼수 있어야 편하겠죠. 메일링 리스트
보는것도 영어로 봐야 되구요. 나중에 자기의 코드를 리눅스 사도에게
보낼때도 documentation 과 설명을 만들어야 되구요.

익명 사용자의 이미지

:-P

익명 사용자의 이미지

커널해커들이라고 커널 소스의 모든것을 이해하고 있지는 않을 겁니다.
각자의 전문분야에 맞게 필요한 부분의 최고자들이겠지요.

실제로 "이건 잘 이해가 가지 않는다. 누구누구님, 이렇게 하는 거 맞수?"
하는 주석도 있더군요.

단, 기초만큼은 정말 튼튼하신 분들일 겁니다.
Assembly, C, 알고리즘, 오토마타...
우리나라 대학, 대학원에서 가르키는 과목들이죠.
기사시험 과목들이기도 하구요.
이거 배워서 어디다 써먹지 했더니, 커널 읽으려면 이거 모르곤
안되더군요.

기초에 충실하는 것 - 어떤 분야에서든 프로그래머를 직업으로 가지려면
기초과목을 항상 복습/연구하는 것이 필요하다고 생각합니다.

익명 사용자의 이미지

그럼 빌게이츠는 어느정도의 머리가 있을까??
처음 도스 코드가 몇줄이였을까요? ㅋㅋ

유닉스를 보구 도스를 만들었다구 하는데..
유닉스 소스는 좀 봤었을까여??

궁금한게 많아지넹..

커널해커들과 빌.. 누가더 천재일까??

근데 천재나여?

Cruz_의 이미지

그전에 어떤책을 보니까... IBM에서 PC의 부품님 OS를 담당한 업체를 찾을
때, CPU는 Intel이 가져가고, OS는 게리 킬달(Gary Kildall)이란 프로그래
머의 CP/M과 MS의 MS-DOS를 놓고 갈등하다가 MS-DOS를 선택했다고 하던데,
선택이 떨어질 당시에 MS사에는 DOS가 없었답니다. (( 개발이 아직 안된,
약간의 시연만 할수 있을정도의 )) 그래서 급하게 QDOS라는 OS를 다른 회
사에서 구입해다가 소스를 약간 수정에서 MS-DOS라는 이름으로 공급했다
고 하는데,... MS가 Windows를 만들때면,... 이미 빌게이츠는 MS의 CEO자
리에 있던,... 그러니까 개발명령은 내려도 개발은 하지않는 자리,...
결론은 MS-DOS나 Windows나 빌의 손에 태어나건 아니라는것입니다.

익명 사용자의 이미지

제가 읽은글은 좀틀리던데요.
오래전이라 어떤신문이였는지 기억은 안나지만
그때 그신문은 그렇게 썼더군요
빌게이츠는 dos를 직접 개발했던 반면 한컴사장은
마케팅에만 관련했다고...

익명 사용자의 이미지

MS-DOS는 다른 회사것을 사들인 후에 약간 고친 것이 맞습니다.

그리고, 이찬진씨는 직접적인 것은 안 하고 폰트 에디터 같은
것을 코딩한 적이 있습니다. (물론 그 폰트 에디터는 한글에서
쓰였습니다. 초기에만)

배범진 wrote..
: 제가 읽은글은 좀틀리던데요.
: 오래전이라 어떤신문이였는지 기억은 안나지만
: 그때 그신문은 그렇게 썼더군요
: 빌게이츠는 dos를 직접 개발했던 반면 한컴사장은
: 마케팅에만 관련했다고...

익명 사용자의 이미지

저도 예전에 그런한것을 꿈을 꾼적이 있습니다..
물론 현재도 그렇지만 생각만 그렇게 가지고 있습니다....

저도 그런한 부분에 동감합니다..

익명 사용자의 이미지

M3, too! -_-;;
정말 궁금하군요... 어케 공부했을까... -_-?
얼마나 열씸히(?)해야 저렇게(?) 될수 있을까...-_-?? 하는 생각이
들죠... -_-;;

익명 사용자의 이미지

미치세요!!! 그러면 언젠간...

Cruz_의 이미지

그전에 한선배가 리눅스 커널을 주면서 이러더군요...
글자크기 줄여서 프린터로 뽑아라... --;;;;
Font 10으로 되어있는거 7로 하고, 한장에 3줄식나오게 해서 뽑았는데,...
다 뽑아서 바닥에 쌓아놓으니까... --;;; 제 무릎정도 오더군요...
이정도 소스라면 미쳐서 하기에는,... 생사포기하고 달려들어야 될거같은
데, 울나라 환경또한 그러지도 못하고,...

익명 사용자의 이미지

'영어 사전을 다 외워라.!!!!'

라구 하면.. 미쳤다구 할까요??
영어를 잘 하기 위해서 영어 사전을 다 외울 필요는 없다고
생각합니다. 필요한 만큼 찾아 보면 되겠지요.

리눅스 소스도 마찬가지 아닐까요? 필요한 모듈을 분석해 보고,,
필요한 만큼만 변형시켜서 사용하면 되지 않을까요?

그렇게 많은 전체 소스코드를 분석하겠다는 것은..
미련하다고 생각을 합니다만...

기분나쁘셨다면 진심으로 죄송합니다. (^^) (--) (__) 꾸벅.

익명 사용자의 이미지

한사람이 그 많은 소스를 다 이해할 필요까지는 없겠죠..
각자 자신있는 부분만...^^

(물론 천재도 있긴 하겠지만..)