finds.dev← search

// the find

littlekernel/lk

★ 3,646 · C · MIT · updated Jun 2026

LK embedded kernel

LK is a small preemptive SMP kernel written in C, originally by Travis Geiselbrecht (Fuchsia/Zircon lineage). It runs on bare metal across an unusually wide range of architectures — ARM Cortex-M through ARM64, RISC-V, x86, M68K, MIPS — and is what boots Android on a large chunk of shipping phones. This is for embedded systems engineers who need a minimal, well-structured kernel they can actually read and port.

The architecture abstraction is genuinely clean: each arch implements a small, consistent set of interfaces (thread.c, arch.c, spinlock, mmu) so porting to a new target is mechanical rather than speculative. The modular rules.mk build system lets you compose exactly what you need without fighting a CMake graph. Active maintenance — pushed three days ago, CI runs QEMU boot tests on multiple targets, not just compile checks. The Cortex-M support in particular is production-quality: proper NVIC handling, stack canaries, SMP on chips that support it.

No dynamic memory allocator worth using in production — heap.c is a simple first-fit allocator with no hardening, so if you're building something that allocates heavily at runtime you'll be replacing it anyway. File system support is thin and scattered; the VFS layer exists but most drivers are stubs or half-finished. Documentation is sparse outside the README — the docs/ directory exists but most pages are outlines. The mix of C and C++ across drivers (AHCI is C++, most arch code is C) means you need a toolchain that handles both, which trips people up on bare-metal targets.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →