Skip to content
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

JSLK Kernel

JSLK is a simple 32-bit hobby kernel designed to run on the x86 architecture (although portability has been taken into consideration). It was started in August 2017 with the objective of learning how a computer operating system works and to improve the coding skills of the main developer. The kernel is mostly written in C with some bits of assembly and has partial compatibility with C++ (a runtime is provided). Some of its features are: extensive HAL API, System V ABI compatibility, memory management, interrupt handling, VGA driver, timers and delays, some synchronization primitives, a growing home-made C library, etc. You can test the current kernel online here.

Build Status GitHub license Project Status Kernel Version

The official documentation can be found here.

Directory Structure

crt: C/C++ Runtime.

docs: Some documentation (writing in progress, thus incomplete).

iso: Filesystem used to build ISO image.

initrd: Files used to build the initrd.

hal: Hardware Abstraction Layer and API.

include: Public kernel headers.

kernel: Main kernel.

lib: Kernel Libraries.

target: Target build recipes.

Supported Architectures

  • x86 (x86common).
  • x86_64 (x64_common).

Note: JSLK is not fully ported to x86_64 architecture yet, if you want to check out the latest features build for x86 instead.

  • Raspberry Pi 1/2/zero (coming soon) (bcm28common).

Building for x86_64

These instructions will help you build JSLK Kernel for the x86 platform.


JSLK can be built on any UNIX like system, such as any Linux distribution, FreeBSD or macOS. Windows can also be used with the WSL enabled. To build the kernel you first need to install some dependencies and the toolchain.

On Linux:

$ sudo apt-get install nasm wget git qemu xorriso  # Change apt-get install for whatever package manager you are using.
$ wget

On macOS:

$ /usr/bin/ruby -e "$(curl -fsSL"
$ brew install nasm
$ brew install wget
$ brew install qemu
$ brew install xorriso
$ wget

On other operating systems the packages:

  • git
  • nasm
  • qemu
  • i386-elf toolchain (can be built using the scripts here)

Can be built from source or installed from other sources.

Note: GRUB must be re-compiled with the i386-elf architecture as a target on any OS. You can find instructions on how to do so here.


To build JSLK from source copy and paste the following commands in a terminal prompt:

$ git clone
$ cd jslk
$ export TARGET=x64common  # You can change this for whichever target you want
$ make

Note: For this to work, your toolchain must be in your path (you can change this in the Makefile).

To clean the source tree:

$ make clean

And to build an ISO image:

$ make floppy

You can also pass the target as an argument to make instead of defining it as a variable:

$ make TARGET=x64common clean all floppy run

To build the initird:

$ ./make_initrd file1 file1 file2 file2 ... file5 file5

Note: The included utility only works in macOS. Recompile the utility for your host OS using:

$ gcc initrd/make_initrd.c -o make_initrd


Although JSLK can be tested on real hardware, it is not recommended, since a bug in the kernel can brick your system. Besides installation to a hard drive is not currently supported, thus testing on a Virtual Machine is recommended.

Testing on a VM

Build the kernel and a floppy image, then:

$ make run


Check for guidelines on how to contribute to the project, create issues and pull requests. We also encourage you to read our code of conduct.


You may find the documentation for the project here.


JSLK is licensed under the GNU General Public License v3.0 - see the LICENSE file for details. An original copy of the documentation of this product should be included with every derivative work or redistributions of this project.


See docs/attrib.txt.

You can’t perform that action at this time.