Karton website
Switch branches/tags
Nothing to show
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.


Karton is a tool which can transparently run Linux programs:

  • 🐧 on a different Linux distribution,
  • 🍎 on macOS,
  • 💻 on a different architecture (ARMv7 and ARMv8, on a x86-64 host).

To do this, you just need to tell Karton which distro 🐧 to use, which packages 📦 to install, and which directories 📂 to make accessible. This is called an image.

Then you can run your commands inside the image just by adding karton run image-name in front of your commands.


$ uname -a # Show we are running on macOS.
Darwin my-hostname 16.4.0 Darwin Kernel Version 16.4.0 [...]

$ # Run the compiler in the Ubuntu image we use for work
$ # (which we called "ubuntu-work"):
$ karton run ubuntu-work gcc -o test_linux test.c

$ # Verify that the program is actually a Linux one.
$ # The files are shared and available both on your
$ # system and in the image:
$ file test_linux
test_linux: ELF 64-bit LSB executable, x86-64, [...]

$ # Same thing but on 32-bit ARMv7 (in the image we
$ # called "ubuntu-work-arm"):
$ karton run ubuntu-work-arm gcc -o test_arm test.c
$ file test_arm
test_arm: ELF 32-bit LSB executable, ARM, EABI5 [...]

$ # We can run the ARM program:
$ karton run ubuntu-work-arm ./test_arm
[... Output of our program ...]

In another terminal you can attach to the running program and debug it.

$ # Find the PID of the test_arm program.
$ karton run ubuntu-work-arm ps aux | grep test_arm
test_arm    42  [...]  test_arm

$ # Debug it!
$ karton run ubuntu-work-arm gdb --pid 42
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
Attaching to process 11
0x00007f53430e4740 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:84
84	../sysdeps/unix/syscall-template.S: No such file or directory.

Does typing every time karton run image-name look boring? You can use the alias command, see karton help alias.


  • Fast 🏃🏽. Launching a program in an image takes fractions of a second.
  • No need to start/stop a virtual machine or container, it's done transparently and quickly.
  • Multiple terminals access the same running image. You can start a program in one terminal and attach to it with gdb from another.
  • Automatic handling of shared directories and files. Your files are accessible both on your system and to programs running in an image.
  • Except for directories you decide to share, the file system is transient. You can reset your changes to the system instantly.
  • Can run Ubuntu, Debian, Fedora and CentOS images.
  • Based on Docker 🐳 containers.