Vladislav K. Valtchev, a senior kernel engineer, introduced Tilck, a monolithic x86 kernel for educational purposes that supports Linux at the binary level. Its compact size and easy design make it the testing ground for kernel mode experiments while preserving the ability to contrast how the exact same usermode bits operate on the Linux kernel. 

To create a programme, Tilck needs the i686-musl toolchain from bootlin.com. In contrast to most educational kernels, it does not require a separate set of custom-written applications. As a result, it can run popular Linux programmes like the BusyBox collection.

Although the monolithic design and Linux compatibility may be limitations, such a design brings the entire project closer to practical applications in the future, as opposed to the situation where considerable efforts are needed to port existing software on it. Tilck can also implement custom non-Linux syscalls.

Read more about Tilck here

Features of Tilck

Hardware support: While the kernel makes use of some older hardware, such as the 8259 PICs for IRQs, the 8254 PIT for the system timer, the 16550 UART for serial communication, the 8042 kb controller, the 8237 ISA DMA, and the Sound Blaster 16 sound card, it also supports modern hardware features, such as SSE, AVX and AVX2 fpu instructions, PAT, the i686 sysenter and ACPI support via ACPICA. ACPI tracks power-button events, reboots or shuts down the computer, and retrieves the battery’s current parameters. 

File systems: Tilck has read-only support for FAT16 and FAT32 (used for initrd), allowing memory-mapping of files, a fully featured ramfs implementation, a minimalist devfs implementation, read-only support for these file systems, and a sysfs implementation for full view of the ACPI namespace, a list of all PCI(e) devices, and Tilck’s compile-time configuration. Tilck features a simplified VFS implementation that allows it to interact with many file systems simultaneously. Tilck does not yet support block devices; therefore, everything is processed in memory.

Processes and signals: Although Tilck internally supports the concept of a thread, userspace is not currently exposed to multi-threading (kernel threads exist, of course). Both fork() and vfork() are integrated, and copy-on-write is employed for fork-ed processes. Tilck offers complete support for TLS (thread-local storage) via set thread area() despite the absence of multi-threading in userspace because libmusl necessitates it even for traditional single processes.

I/O: Tilck provides vectored I/O via readv() and writev() besides the standard read() and write() syscalls and select(), poll(), and non-blocking I/O. 

Userspace applications: Tilck can execute various console programmes, including the BusyBox suite, Vim, TinyCC, Lua, and framebuffer programmes like fbDOOM, a DOOM port for the Linux console.

Console: The Tilck console supports more than 90% of the features included in Linux’s console. It operates in the same way in text mode and frame buffer mode (by using levels of abstraction). Vim can also run on Tilck.

Tilck vs Linux

Tilck does not target multi-user servers or desktop machines like Linux. Due to more features and the inherent complexity they provide, Linux is complicated. Tilck substitutes fewer features with:

  • Simpler and shorter code 
  • Reduced binary size
  • Deterministic behaviour
  • Ultra-low-latency
  • More robustness and simpler development

Tilck’s system is integrated with unit tests, kernel self-tests, system tests, and automated interactive system tests (simulating real user input through QEMU’s monitor). Although it is educational project at the moment, it aims to be almost enterprise-level. 

The post  Tilck, a New Linux-Compatible Kernel is Here appeared first on Analytics India Magazine.