- Tilck เป็น เคอร์เนลแบบ monolithic ที่เข้ากันได้กับ Linux ในระดับไบนารี โดยออกแบบมาสำหรับ การศึกษา และ ระบบฝังตัว
- มีเป้าหมายที่ การใช้ทรัพยากรให้น้อยที่สุด จึงเหมาะกับอุปกรณ์ฝังตัวหรือสภาพแวดล้อมที่มีข้อจำกัด
- สามารถรัน แอปพลิเคชันฝั่งผู้ใช้ของ Linux ที่มีอยู่แล้ว เช่น BusyBox ได้ทันที จึงไม่จำเป็นต้องเขียนแอปแยกต่างหาก
- รองรับสถาปัตยกรรม i686 และ RISC-V64 และมีแผนพอร์ตไปยัง ARM และ CPU แบบไม่มี MMU ในอนาคต
- มีฟีเจอร์หลากหลาย เช่น ระบบไฟล์, การจัดการโปรเซส, คอนโซล, การดีบัก และยังรัน Vim, Micropython, Lua ได้
- รองรับ การบูตบน QEMU และฮาร์ดแวร์จริง พร้อมมี สภาพแวดล้อมสำหรับการทดสอบและดีบัก ที่ครบถ้วน ทำให้ผู้เริ่มต้นก็ลองใช้งานได้ง่าย
Overview
-
Tilck คืออะไร?
- Tilck เป็น เคอร์เนลเพื่อการศึกษาแบบเข้ากันได้กับ Linux ที่มี การออกแบบเล็กและเรียบง่าย
- ไม่ได้ต้องใช้แอปเฉพาะของตัวเองเหมือนเคอร์เนลบางตัว แต่สามารถใช้ โปรแกรม Linux ที่บิลด์ด้วย toolchain ที่อิง musl ได้
- สามารถรันแอปได้หลายตัว เช่น BusyBox, Vim, TinyCC
- ใช้โครงสร้างแบบ monolithic ที่จัดการทุกฟังก์ชันในพื้นที่เคอร์เนลเดียวเหมือน Linux
- ให้ความสำคัญกับ การทำงานบนฮาร์ดแวร์จริง
-
แผนในอนาคต
- เหมาะกับ สภาพแวดล้อมแบบฝังตัว ที่ต้องการระบบ หน่วงต่ำมากและกำหนดพฤติกรรมได้แน่นอนอย่างสมบูรณ์
- ตั้งเป้าเป็น ตำแหน่งทางเลือกเฉพาะทาง ระหว่าง Embedded Linux กับ FreeRTOS/Zephyr
- มีแผนรองรับ ARM64, MMU-less, เครือข่าย (UDP/IP) และ สตอเรจ (FAT32, ext2)
- เป้าหมายระยะยาวคือรองรับฟังก์ชันเครือข่ายและสตอเรจบน SoC อย่าง Raspberry Pi 3/4
-
สิ่งที่ Tilck ไม่ใช่
- Tilck ไม่ใช่โปรเจ็กต์ที่ตั้งใจมาแทนที่ Linux
- ไม่ได้มุ่งเป็นเดสก์ท็อป OS (เช่น ไม่รองรับ X server)
- Tilck ลดฟีเจอร์ให้เหลือน้อยที่สุดเพื่อความเรียบง่ายและความเป็นเรียลไทม์
-
Tilck เทียบกับ Linux
- 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 เป็นต้น
-
ระบบไฟล์
- รองรับ ramfs, devfs, sysfs
- รองรับ FAT16 และ FAT32 แบบอ่านอย่างเดียว และสามารถทำ memory mapping ได้
- มี VFS แต่ ยังไม่รองรับ block device (ทุกอย่างทำงานอยู่ในหน่วยความจำ)
-
โปรเซสและสัญญาณ
- รองรับ ฟังก์ชันพื้นฐานของโปรเซส/สัญญาณ เช่น
fork, vfork, waitpid, rt_sigaction
- แม้จะ ไม่รองรับ multithreading ใน userspace แต่มีการทำ TLS (
set_thread_area) ตามข้อกำหนดของ libmusl
-
I/O
- นอกจาก
read, write แล้ว ยังรองรับ readv, writev, select, poll
- ไม่รองรับ epoll
-
คอนโซล
- รองรับฟีเจอร์ของ Linux console ได้มากกว่า 90%
- รองรับทั้งโหมดข้อความและโหมดเฟรมบัฟเฟอร์
- ทำได้ดีถึงระดับที่ Vim ทำงานบน Tilck ได้อย่างสมบูรณ์
-
แอปพลิเคชัน userspace
- สามารถรันแอปคอนโซลและเฟรมบัฟเฟอร์ เช่น BusyBox, Vim, Micropython, Lua, fbDOOM
การบูต Tilck
-
บูตโหลดเดอร์ของ Tilck
- Tilck มี บูตโหลดเดอร์ในตัวที่รองรับทั้ง BIOS/UEFI
- สามารถเลือกโหมดวิดีโอ เลือกเคอร์เนล และแก้ไขคอมมานด์ไลน์ได้
-
บูตโหลดเดอร์ของบุคคลที่สาม
- สามารถบูต Tilck ด้วยบูตโหลดเดอร์ที่รองรับ Multiboot 1.0 (เช่น GRUB)
- มีตัวอย่างการตั้งค่า GRUB ให้ด้วย
ความเห็นเกี่ยวกับประสบการณ์ผู้ใช้
- Tilck ถูกออกแบบมาให้ นักพัฒนามือใหม่ก็สามารถบิลด์/ทดสอบได้ง่าย
- มีสคริปต์สำหรับบิลด์ toolchain ของตัวเอง จึงลดภาระในการติดตั้ง dependency
- คล้าย
buildroot แต่เรียบง่ายกว่ามาก
- มีสคริปต์สำหรับรัน QEMU หลายแบบให้พร้อม
1 ความคิดเห็น
ความเห็นจาก Hacker News
รู้สึกว่านี่เป็นโปรเจ็กต์ที่น่าสนใจซึ่งอยู่กึ่งกลางระหว่าง Unix ยุคเก่าแบบ xv6 (เวอร์ชันปี 1975 อ้างอิง Lion book) กับ Linux kernel แบบเต็มรูปแบบ รู้สึกยินดีที่เห็นมันทำงานบนบอร์ด RISC-V ราคา $9 ชื่อ LicheeRV Nano (CPU 64 บิต 1.0GHz (C906), MMU, FPU, ยูนิตเวกเตอร์ 128 บิต, พร้อม DDR3 256MB) ซึ่งบอร์ดนี้มีประสิทธิภาพใกล้เคียง Pentium III ช่วงกลางหรือ PowerPC G4 และก็น่าจะพอร์ตไปยัง Milk-V Duo 256M, Duo S หรือรุ่นอย่าง Duo (RAM 64MB, $5) ที่ใช้ SoC เดียวกันได้ง่ายมาก ตอนนี้ยังไม่มีการรองรับเครือข่าย, block device หรือ multicore
G4 ที่มี Altivec ให้ประสิทธิภาพด้านมัลติมีเดียแทบจะพอๆ กับ PIV ที่มี SSE2
ทุกๆ ไม่กี่เดือนจะเห็น OS kernel ใหม่ที่ทำงานได้แค่ใน VM และไม่มี hardware abstraction ปรากฏออกมา Tilck ไม่ใช่แบบนั้น Tilck เป็นระบบปฏิบัติการจริง ทำงานบนฮาร์ดแวร์จริง ขณะที่พื้นที่ของแบบแรกนั้นแทบอิ่มตัวแล้ว Tilck กลับให้ความรู้สึกว่าเข้ามาเติมช่องว่างเฉพาะทางที่แทบไม่มีใครเติมมานานได้ดี
น่าประทับใจที่ Tilck บูตได้เร็วมาก และยังรัน doom ผ่าน framebuffer ได้ด้วย ดูได้จากลิงก์ https://www.youtube.com/watch?v=Ce1pMlZO_mI อีกทั้งยังดีที่เห็นผู้พัฒนาตอบคำถามของผู้ที่อยากเรียนต่อด้าน CS ใน YouTube อย่างเป็นกันเองด้วยตัวเอง
เห็นว่า Tilck ถูกระบุว่าเป็น "เพื่อการศึกษา" แต่ก็สงสัยว่าถ้าเปลี่ยนแค่ bootloader มันจะใช้งานได้ดีบนอุปกรณ์ embedded ขนาดเล็กด้วยหรือไม่
ไฟล์ README ของ Tilck ยาวกว่าที่คาดไว้และอ่านสนุกอย่างน่าประหลาด ถ้าเป็นนักพัฒนา OS ก็ควรอ่านสักครั้ง
สำหรับคนอย่างฉันที่เติบโตมากับ Minix ในฐานะเครื่องมือการศึกษา ก็สงสัยว่า Tilck จะมีประโยชน์แค่ไหน
มีการแชร์ลิงก์ไปยังกระทู้ HN เกี่ยวกับ Tilck ในอดีต:
Tilck น่าสนใจ แต่เสียดายที่ยังไม่มีการรองรับ multi-user อย่างน้อยถ้ารองรับแค่ chmod/chgrp หรือการเปลี่ยนเจ้าของไฟล์และกลุ่มได้ ก็น่าจะทำให้เอาไปใช้กับอะไรอย่าง NFS server ได้มากขึ้น เลยหวังว่าผู้พัฒนาจะกลับมาพิจารณาเรื่อง multi-user อีกครั้ง
ความเข้ากันได้ของ filesystem ใน Tilck เป็นปัญหาใหญ่กว่านั้นอีก สำหรับงานที่ฉันต้องใช้ จริงๆ แล้วแพลตฟอร์มที่ผ่านการพิสูจน์ด้านความน่าเชื่อถือย่อมดีกว่า และ Tilck ถูกออกแบบเพื่อการศึกษา จึงไม่เหมาะในแง่ความปลอดภัยสารสนเทศหรือความทนทานของข้อมูล
อาจคิดวิธีเก็บค่า user:group ไว้ใน filesystem อย่างเดียว แล้วค่อยบังคับใช้เฉพาะตอน runtime ตอนให้บริการไคลเอนต์ก็ได้ เช่น ถ้า Linux file server ทำงานเป็น root ก็สามารถตรวจสิทธิ์และจัดการความเป็นเจ้าของได้โดยไม่ต้องสลับผู้ใช้ของตัวเอง หรือถ้าทำการ fork แยกต่อเซสชันแล้วสลับไปเป็นผู้ใช้ของไคลเอนต์นั้น เคอร์เนลก็จะบังคับใช้สิทธิ์ให้ ทำให้การจัดการสิทธิ์ไฟล์ถูกแก้ไปโดยอัตโนมัติ
โปรเจ็กต์นี้น่าประทับใจจริงๆ ทำให้นึกถึงสมัยที่รัน Linux สำหรับ NAT firewall บนแผ่นฟลอปปีดิสก์ 3.5 นิ้ว