Swift로 만든 최소 커널, QEMU virt에서 부팅
- Embedded Swift로 최소 커널을 작성해 QEMU의 virt 머신, 타깃 aarch64-none-none-elf에서 실행함. 커널이 하는 일은 메시지 하나 출력하고 무한 대기하는 것뿐임
- Embedded Swift는 OS와 표준 라이브러리가 없는 환경을 겨냥한 Swift 부분집합이며 공개 릴리스에는 아직 안 들어가서, main-snapshot 개발 툴체인을 설치해야 컴파일됨
- QEMU가 CPU를 raw 상태로 시작하므로 어셈블리로
_start심볼을 정의하고 첫 코어의 스택을 세운 뒤 Swift 진입 함수 kernel_main으로 점프하도록 구성함 toolset.json에-nostdlib,-fuse-ld=lld,--gc-sections,-T linker.ld를 넣어 표준 라이브러리 연결을 막고 커스텀 링커 스크립트를 씀. 첫 링크는 putchar, memmove 미정의 심볼과.strtab섹션 타입 불일치로 실패함- Max Desiatov의 지적으로
@_cdecl대신 Swift 6.3의 @c 속성을 쓰도록 코드와 글을 수정함
Hacker News opinions
"machine emulators for hackers"라니 이게 뭐냐, Hack the Planet까지 나오네 ㅋㅋ
1995년 영화 Hackers에서 나온 대사임. 그냥 그 영화 밈이니까 넘어가면 됨
솔직히 커널이라기보다 hello world에 가까움. 메시지 하나 찍고 끝이잖아
Embedded Swift는 진짜 괜찮더라. 임베디드 쪽에 도구가 하나 더 생긴 셈이고 언어 자체도 쓸 만함. 크로스 플랫폼이나 컴파일 느린 문제는 여기선 거의 안 느껴짐
리셋 벡터나 컴파일러 intrinsic까지 Swift로 다 쓸 수 있고, 제일 좋은 건 C/C++ interop이 그냥 된다는 점임. .c/.h 복사해서 modulemap에 넣으면 끝이고 .o 파일을 링커에 넘기면 됨. freestanding 함수 4~5개만 구현하면 되고 힙 할당도 끌 수 있음. Zephyr나 U-Boot 드라이버도 Swift로 쓸 수 있을 듯
레지스터에 값 때려박는 거 좋다, 완전 옛날 방식임. DMA 나오기 전 IO가 다 이랬음
그 방식 지금도 다 씀
런타임 부풀림 없이 freestanding ARM 타깃이 된다는 걸 보여준 PoC로는 좋음
커널은 이미 수십 개 있고 만드는 것도 어렵지 않음. 진짜 도전하려면 드라이버를 만들어 봐야 함
앞으로 이런 게 훨씬 많아질 듯. 유닉스 커널이 데스크톱 밖을 다 먹은 건 설계가 좋아서라기보다 소스가 공짜여서였음. 이제 AI 때문에 실험이 쉬워졌으니 OS 설계에 새 시기가 올 수도 있음. Omarchy가 그 시작임
Omarchy가 왜 나옴? 그거 그냥 stock Linux에 vibe coded 설정 파일 붙인 거임. 새 메모리 관리나 GPU/TPU를 OS primitive로 올리는 실험을 봐야 흥미롭지 그건 아님
맞는 말임. Omarchy는 업데이트로 시스템 깨뜨리기로 유명한 arch 파생이고, 커널에 필요한 진지한 작업의 예로 들 건 아님
근데 리눅스 커널을 AI 프로젝트로 그냥 대체할 수 있다는 건 좀 과한 일반화임. 리눅스에 들어간 작업량이 어마어마하고, AI가 처음부터 다시 푸느라 토큰을 태워도 대부분 못 풀거나 엉망으로 풀 거임. 앞으로는 새 프로젝트 생성보다 기존 오픈소스로 실험하는 쪽이 늘어날 듯
나도 비슷하게 해봤음. Claude로 xv6, plan 9, oberon, singularity, Squeak 같은 커널을 OCaml로 다시 썼음. OS 설계 실험이 확실히 쉬워졌음