The Pedigree Operating System
C C++ Python HTML Objective-C Shell Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

The Pedigree Operating System

Build Status


The latest disk image is the most recent successful build of Pedigree from our Buildbot. There are no guarantees of stability or even functionality of these builds.

The nightly disk image is from nightly builds on our Buildbot, with the same disclaimer.

Build Dependencies

You'll need at least the following to build Pedigree and its compilers:

  • SCons (>1.2.0)
  • libmpfr, libgmp, and libmpc headers (typically via -dev packages)
  • SQLite3
  • genisoimage and/or mkisofs
  • perl
  • autoconf

Building Pedigree with Easy Build

We highly recommend you first try one of our Easy Build scripts before you try and run SCons manually. There's a little bit of work involved in setting up a build of Pedigree for the first time, which the Easy Build script handles for you. After that it's as easy as just running scons at the command line.

Just run ./easy_build_[target].sh to build Pedigree. Valid options for target include:

  • x64
  • arm
  • hosted (for a version of the kernel that runs on Linux)

Dependencies and a cross-compiler will be installed and/or created, allowing you to jump straight into testing Pedigree.

To build Pedigree at any point after this, just run scons. The build system remembers the configuration the Easy Build specified for you.

Different Targets

To switch between architectures, just remove options.cache and .autogen.cache, and then run an Easy Build script.

Building Pedigree Manually

Alternatively, you can build manually.

Step 1: Cross-Compiler

To build a cross-compiler, in the root of the Pedigree tree, run:

$ ./scripts/ $TARGET-pedigree \ $PWD/pedigree-compiler

If you are building on OSX, you should also pass osx-compat as the final parameter to the script.

Valid targets include:

  • x86_64
  • armv7

Step 2: Pedigree Base

Configure the Pedigree UPdater (pup) to start:

$ ./ amd64 # (or arm) && ./ sync

You'll need at least Pedigree's libtool to continue:

$ ./ install libtool

Now, build an initial libc and libm:

$ scons CROSS=$PWD/pedigree-compiler/bin/$TARGET-pedigree- build/ \ build/

With this complete, the compiler build process can be completed:

$ ./scripts/ $TARGET-pedigree \ $PWD/pedigree-compiler libcpp

Step 3: Required Packages

Install necessary packages to build the full userspace:

$ ./ install libpng
$ ./ install libfreetype
$ ./ install libiconv
$ ./ install zlib
$ ./ install bash
$ ./ install coreutils
$ ./ install fontconfig
$ ./ install pixman
$ ./ install cairo
$ ./ install expat
$ ./ install mesa
$ ./ install ncurses
$ ./ install gettext
$ ./ install pango
$ ./ install glib
$ ./ install harfbuzz
$ ./ install libffi
$ ./ install gcc

Step 4: Final Build

Finally, build the rest of the kernel and userspace:

$ scons

From now on, you can simply run scons to build Pedigree.

Running Pedigree

Boot from build/pedigree.iso, with an attached disk for build/hdd.img, to run Pedigree.

You can also specify createvmdk=1 and/or createvdi=1 to create VMDK or VDI disk images for your emulator. These options require qemu-img.

Images Directory

The images/local directory allows you to use pup, Pedigree's package manager, to manage your hard disk image file set. If you ran the Easy Build script, pup is already configured and ready to go.

Simply run:

$ ./ sync

to synchronise your local pup repository with the server.

Then you can run: $ ./ install <package> to install a package.

Visit to see a list of all packages that are available and can be downloaded.

Remember to re-run scons after installing a package to ensure your disk image has the new package on it. You may need to rm build/hdd.img if SCons doesn't detect that the images directory has changed.

You can also add arbitrary files to the images/local directory to use them at runtime. For example, you could create a directory under users for yourself, and add a .bashrc and .vimrc.

User Management

A utility script, scripts/, is provided to add or remove users from the database for use at runtime.

Reporting Issues

Report any issues on the project tracker at


You can find us in #pedigree on Freenode IRC.


We welcome contributions. The preferred mechanism for contributing is via pull requests. See the issue trackers at if you need ideas. Alternatively, come join us in our IRC channel on Freenode (see above).

We highly recommend working through a successful build and playing with some of Pedigree's features in a VM before leaping into contributing. This will help with understanding much of what you see in the code, and also potentially give you some more ideas about areas to contribute to.