16P by neo with xguru 2023-08-13 | favorite | 댓글 2개
  • 리눅스 커널은 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 스트링 명령어를 지원하는 옵션인듯)
Hacker News 의견
  • 현대 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가 나중에 탭 지지자가 되었을 수도 있다는 추측.
  • 코드에 있는 주석의 깊이와 빈도가 인정받아, 독자들에게 접근성을 제공하며, 누군가가 컴파일에 성공했는지에 대한 궁금증이 있음.