Tilck - 리눅스 호환 미니멀 커널
(github.com/vvaltchev)- Tilck는 리눅스와 바이너리 호환되는 모놀리식 커널로, 교육 목적과 내장 시스템용으로 설계됨
- *리소스 사용 최소화**를 목표로 하여 임베디드 장치나 제한된 환경에서 유용함
- BusyBox 등 기존 리눅스 사용자 애플리케이션을 그대로 실행할 수 있어 별도 앱 작성 불필요
- i686과 RISC-V64 아키텍처를 지원하며, 향후 ARM 및 MMU-less CPU로도 포팅 계획 있음
- 파일시스템, 프로세스 관리, 콘솔, 디버깅 등 다양한 기능이 포함되며, Vim, Micropython, Lua 등도 실행 가능
- QEMU 및 실기기 부팅 지원, 테스트 및 디버깅 환경도 잘 갖춰져 있어 입문자도 쉽게 시도 가능
Overview
-
What is Tilck?
- Tilck는 작고 단순한 설계를 가진 리눅스 호환 교육용 커널
- 기존 커널처럼 자체 앱이 필요한 게 아니라, musl 기반 툴체인으로 빌드된 리눅스 프로그램 사용 가능
- BusyBox, Vim, TinyCC 등 여러 앱을 실행 가능
- monolithic 구조로 리눅스처럼 단일 커널 공간에서 모든 기능 처리
- 실제 하드웨어에서의 실행도 중시
-
Future plans
- 초저지연·완전 결정론적 시스템이 필요한 임베디드 환경에 적합
- Embedded Linux와 FreeRTOS/Zephyr 사이의 틈새 포지션을 목표
- ARM64, MMU-less, 네트워크 (UDP/IP) 및 저장장치 (FAT32, ext2) 지원 계획 있음
- 라즈베리파이 3/4 같은 SoC 대상으로 네트워크·저장 기능까지 지원하는 것이 장기 목표
-
What Tilck is NOT?
- Tilck는 리눅스를 대체하려는 프로젝트가 아님
- 데스크탑 OS를 목표로 하지 않음 (X 서버 등 미지원)
- Tilck는 단순성과 실시간성을 위해 기능을 최소화함
-
Tilck vs Linux
- 리눅스가 복잡한 이유는 다기능 때문이며, Tilck는 단순성, 소형화, 초지연성을 선택
- Tilck는 테스트 인프라도 엔터프라이즈 수준에 가깝게 갖추려 노력
Features
-
i686 지원
- 구형 하드웨어(8259 PIC, 8254 PIT 등)와 최신 기능(SSE, AVX, ACPI 등) 동시 지원
- ACPI 통해 전원 이벤트 처리, 배터리 정보 확인 가능
- 다양한 x86 환경 (BIOS, UEFI, CSM 등)에서 테스트됨
-
riscv64 지원
- 임베디드 중심 구조
- QEMU, Sipeed licheerv-nano 보드 지원
- 장치 정보는 device tree 통해 전달되며, 커널 코드에 보드 의존 코드 없음
- ns16550 UART, PLIC/INTC 인터럽트 컨트롤러 등 지원
-
File systems
- ramfs, devfs, sysfs 지원
- FAT16, FAT32는 읽기 전용으로 지원되며, 메모리 매핑 가능
- VFS 존재, 단 블록 디바이스 미지원(모든 것이 메모리 내에서 동작)
-
Processes and signals
-
fork
,vfork
,waitpid
,rt_sigaction
등 기본 프로세스/시그널 기능 지원 - 사용자 공간 멀티스레딩 미지원이나,
libmusl
요구사항에 따라 TLS (set_thread_area
) 구현됨
-
-
I/O
-
read
,write
외에readv
,writev
,select
,poll
지원 - epoll은 미지원
-
-
Console
- 리눅스 콘솔 기능의 90% 이상을 구현
- 텍스트/프레임버퍼 모드 모두 지원
- Vim이 Tilck에서 완벽히 작동할 정도로 구현됨
-
Userspace applications
- BusyBox, Vim, Micropython, Lua, fbDOOM 등 콘솔 및 프레임버퍼 앱 실행 가능
Booting Tilck
-
Tilck's bootloader
- Tilck는 BIOS/UEFI 모두 지원하는 부트로더 포함
- 비디오 모드, 커널 선택, 커맨드라인 편집 가능
-
3rd-party bootloaders
- Multiboot 1.0 지원 부트로더 (예: GRUB)로 Tilck 부팅 가능
- GRUB 설정 예시도 제공됨
A comment about user experience
- Tilck는 초보 개발자도 쉽게 빌드/테스트할 수 있게 설계됨
- 종속성 설치 부담 없이, 자체 툴체인 빌드 스크립트 제공
-
buildroot
와 유사하지만 훨씬 단순 - 다양한 QEMU 실행 스크립트도 제공
Hacker News 의견
-
xv6와 같은 옛날 Unix(1975년 버전, Lion book 참고)과 풀 Linux 커널 사이의 중간 지점에 해당하는 흥미로운 프로젝트임을 느낌, LicheeRV Nano라는 $9짜리 RISC-V 보드(1.0GHz 64비트 CPU(C906), MMU, FPU, 128비트 벡터 유닛, 256MB DDR3 탑재)에서 동작하는 모습을 보고 반가움을 느낌, 이 보드는 펜티엄 III 중기나 PowerPC G4와 비슷한 성능임, 같은 SoC를 사용하는 Milk-V Duo 256M이나 Duo S, 혹은 Duo(64MB RAM, $5과 같은 모델)로의 포팅도 매우 쉬울 것 같음, 현재 네트워크나 블록 디바이스, 멀티코어 지원은 없는 상태임
- 네트워크와 멀티코어 지원이 없는 Linux는 상상이 되지만, 블록 디바이스까지 없는 OS는 낯섦, 캐릭터 디바이스만 의미하는 것인지 궁금함, FAT 드라이버는 어떻게 동작하는 것인지 궁금함
-
Altivec를 탑재한 G4는 멀티미디어에서 SSE2를 가진 PIV와 거의 비슷한 수준의 성능을 냄
-
몇 달마다 하드웨어 추상화 없이 VM에서만 동작하는 새로운 OS 커널이 등장하는 모습을 봄, Tilck은 그런 종류가 아님, Tilck은 진짜 운영체제임, 실제 하드웨어에서 동작함, 전자의 영역은 이미 포화상태인데 반해 Tilck은 예전부터 거의 채워지지 않았던 틈새를 잘 채워주는 느낌임
-
Tilck이 부팅 속도가 매우 빠르고 doom도 framebuffer로 구동하는 모습이 인상적임, https://www.youtube.com/watch?v=Ce1pMlZO_mI 링크에서 볼 수 있음, 개발자가 유튜브에서 CS 지망생의 질문에 직접 친절하게 답변하는 모습도 보기 좋았음
- 영상이 짧고 핵심적임, Vim 실행 모습도 보여주는데, 여러 Linux syscall의 일부만으로 Vim 같은 대형 소프트웨어까지 컴파일해서 돌리는 것은 꽤 인상적임
-
Tilck이 "교육용"이라고 표시된 것은 확인했지만, 부트로더만 교체한다면 소형 임베디드 기기에서도 쓸만한지 궁금함
-
Tilck의 README 파일이 예상외로 길고 재미있어서 OS 개발자라면 꼭 읽어볼 만함
-
Minix와 함께 교육용으로 자라온 나 같은 사람들에게 Tilck이 얼마나 유용할지 궁금함
- Tilck은 매우 작고 결정론적인 모노커널임, 현재 약 100여 개의 Linux syscall을 리눅스 호환 형태로 구현함, 교육적 도구로도 좋지만 장기적으로는 리눅스 호환 RTOS 커널을 지향함, 현재는 musl로 정적으로 링크된 바이너리만 지원하고 부팅 및 구동에 약 3MB RAM만 소요됨, 코드베이스가 작고 단순해서 교육적 목적에 맞으며, 궁극적으로는 임베디드 시스템의 실제 프로덕션 환경에서도 쓰이는 것이 목표임
-
Tilck 관련한 과거 HN 토론 링크를 공유함:
- 3년 전(75개 댓글): https://news.ycombinator.com/item?id=34295165 (그때는 riscv64 미지원)
- 5년 전(7개 댓글): https://news.ycombinator.com/item?id=28040210
-
Tilck이 흥미롭지만 멀티유저 지원이 없는 점이 아쉬움, 최소한 chmod/chgrp 등 파일 소유자와 그룹 변경 정도만 지원하면 NFS 서버 같은 곳에도 활용도가 커질 것 같아서, 멀티유저 지원을 개발자가 다시 고려해줬으면 하는 바람임
-
Tilck의 파일시스템 호환성이 그보다 더 큰 문제임, 사실 내 용도라면 신뢰성이 검증된 플랫폼이 낫고, Tilck은 교육용에 맞춰져 있어서 정보보안이나 데이터 견고성 측면에서는 적합하지 않음
-
user:group 값을 파일시스템에 기록만 해두고 런타임에서는 클라이언트를 서비스할 때만 반영하는 방법도 생각 가능함, 예를 들어 리눅스 파일서버가 루트로 동작하면 자체 사용자 변경 없이도 권한 체크와 소유권 관리를 할 수 있음, 또 한 세션마다 포크해서 해당 클라이언트 유저로 전환하면 커널이 강제로 권한을 부여해줘서 파일 권한 처리도 자동으로 해결됨
-
-
이 프로젝트는 정말 인상적임, 예전 3.5인치 플로피로 NAT 방화벽용 Linux를 돌리던 시절이 떠오름