# Linux v0.01의 내부 살펴보기

> Clean Markdown view of GeekNews topic #10320. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=10320](https://news.hada.io/topic?id=10320)
- GeekNews Markdown: [https://news.hada.io/topic/10320.md](https://news.hada.io/topic/10320.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2023-08-13T10:10:27+09:00
- Updated: 2023-08-13T10:10:27+09:00
- Original source: [seiya.me](https://seiya.me/blog/reading-linux-v0.01)
- Points: 16
- Comments: 2

## Topic Body

- 리눅스 커널은 3600만 라인짜리 거대한 오픈소스지만, 첫번째 버전은 10239 라인 이었음(주석/빈줄 제외하면 8670)  
- Linux v0.01은 그 간결함으로 인해 Unix 스타일 OS커널의 내부를 배우기 위한 좋은 출발점   
- v0.01은 66개의 시스템 콜만 가지고 있음   
  - 파일/디렉토리 생성,삭제,쓰기  
  - chmod, chown, pipe, fork, execve  
  - Socket 컨셉이 도입되지 않아서 네트워크 지원불가   
  - mount는 아직 구현되지 않음   
- Intel 386 아키텍처에 대해서 하드코딩 되어 있음(MINIX 저자가 이를 비판함)  
  - strcpy 가 i386 명령어를 사용한 어셈블리로 코딩   
- PC/AT 기기들만 지원   
  - CMOS, PIT(Programmable Interval Timer), ATA(PIO), VGA(텍스트 모드), Intel 8042 PS2 키보드(어셈블리)  
  - 아직 drivers 폴더도 없고, 서브시스템에 하드코딩 되어있음   
- Linus가 원래 붙였던 이름인 "FREAX" Kernel 이 적힌 주석이 Makefile에 있음   
- 파일시스템은 MINIX 만 지원(ext 는 MINIX에서 영감을 받았음)  
- 스케줄러 코드에 "이 부분은 모든 환경에서 동작하는 꽤 좋은 코드라 변경할 이유가 없을 것!" 이라고 주석이 달린게 있음  
  - 물론 현재는 다양한 개선 및 알고리듬이 도입되면서 수정되었으므로 이 예언은 틀렸음  
- 커널 패닉 구현부는 단 5줄 : "커널 패닉: 원인" 을 출력하고 `for(;;)`로 시스템을 중단  
- 커널 공간에서 fork(2)를 호출하는 부분이 있음  
  - 그렇게 보이지만 실제로는 그 앞에 move_to_user_mode() 가 트릭   
- Linus는 8Mb 이상의 램을 가진 기기가 없었음 (자신은 없어서 테스트 해보지 못했으니, 가진 사람이 잘 해보라고..)  
- 현대의 툴체인으로는 컴파일 하기 어려움   
  - GCC가 하위호환이 되긴 하지만 충분하지 않음   
  - Linus는 -mstring-insns 라는 옵션이 있는 자신만의 GCC가 있었음(아마도 x86 스트링 명령어를 지원하는 옵션인듯)

## Comments



### Comment 20257

- Author: arfwene
- Created: 2023-10-31T15:19:17+09:00
- Points: 1

흥미롭네요

### Comment 18176

- Author: neo
- Created: 2023-08-13T10:10:27+09:00
- Points: 2

###### [Hacker News 의견](https://news.ycombinator.com/item?id=37101588) 
- 현대 Linux의 복잡성에 대한 논의, Linux v0.01의 코드 줄 수의 4500배에 달하는 복잡성이 정말 필요한지에 대한 의문 제기.
- 독자들이 Linux의 각 주요 소프트웨어 모듈에 사용된 코드 줄 수와 기능의 그래픽 분석을 보고 싶어함.
- Linux, SQLite, vim과 같은 클래식 코드베이스를 읽는 것이 제안됨, 이들은 대부분 한 사람에 의해 작성되었으며 매우 성공적이거나 영향력이 있었음.
- Linux의 'counter' 작동 방식에 대한 설명, 작업이 실행 가능하지 않은 경우 2 * 우선 순위까지 지수적으로 감소한다는 주장.
- Redhat이 IPO 시 주주들에게 0.01 소스 코드가 담긴 포스터를 보냈다는 보고, 독자들이 가끔 읽는 것을 흥미롭게 생각함.
- GCC (GNU Compiler Collection)의 후진 호환성에 대한 논의, GCC가 오랫동안 자신의 이전 버전을 컴파일하지 못했다는 댓글.
- 독자들이 더 깊게 이해하고 읽기 위해 주석이 많이 달린 Linux Kernel Source Code로 안내됨.
- Linux와 같은 큰 성공 프로젝트의 첫 작동 버전을 읽는 것이 이해하는 데 좋은 방법이라는 제안, 보통 많은 추상화/일반화 없이 가장 중요한 핵심 기능만 포함하고 있음.
- 일부 독자들이 소스 코드에서 탭 대신 공백이 사용된 것을 발견, Torvalds가 나중에 탭 지지자가 되었을 수도 있다는 추측.
- 코드에 있는 주석의 깊이와 빈도가 인정받아, 독자들에게 접근성을 제공하며, 누군가가 컴파일에 성공했는지에 대한 궁금증이 있음.
