This is a minimal x86 OS written in D with both 32 bit and 64 bit configurations. It's a good starting place for anyone doing D OS development.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This is the XOmB-barebones distribution. It comes with the bare minimum needed to get a booting OS in D.

Except we added kprintfln. You're welcome.

The updated version of this file is kept on our wiki, located here:

Don't expect this to be kept as up to date. We'll try, but the newest version will always be on the wiki, so check there.

The XOmB Bare Bones distribution is a minimal 64 bit OS written in D, distilled from the main project by [[User:Wilkie|wilkie]] and [[User:Steveklabnik|Steve Klabnik]].

== About ==
The [ osdev wiki] has a page called [ Bare Bones]. On it, they show how to make a minimal OS written in the C programming language. When we started [ discussing programming an OS in D], some people indicated an interest in having a similar example, but in the D language.

We decided to oblige. We've distilled a minimal OS out of XOmB, and are releasing it as the "XOmB Bare Bones" distribution.

== Why Bare Bones? ==
Part of XOmB's [[:Category:Core Values|core values]] is [[Education|education]]. We'd like to enable other people to work on systems, and that means systems other than our own, too. Not everyone wants to make the kind of OS we plan on turning XOmB into, other people might want to make a monolithic or microkernel. That's awesome, and we want to accommodate those people as well as ourselves.

[[Liber et Publicus]] is important, because it enables one person to do the work once, and let others stand on his shoulders to make the things they want. We'd be doing others a dis-service if we made our research available only to our project. We'd like to pick that low hanging fruit once, and then share it with the rest of the world. Of course, we'd then like to teach them how to pick fruit, but that's beyond the point. Not everyone cares about the actual boot process, and we'd like to make that Just Work for those people who want it to be there.

In addition, working with a base system is easier for people to get into. A new person who wants to help with the project can check out the XBB, and it'll help ease them into the complexity of the system.

== Get XBB ==
=== For Users ===
If you'd like to make your own OS from XBB, or just wish to play around with it without contributing to XBB itself, you can download either a .zip or a .tgz file directly from [ GitHub]. Just click the 'download' button to the right of the project name.

=== For Contributers to XBB ===
The git repository is located [ here]. If you haven't used git before, check out our [[Using Git]] tutorial.

The short lowdown:

<pre>git clone git://</pre>

Once you've made some changes and wish to submit them back to us, click the pull request button, and we'll check over your patch and apply it if it's cool enough.

== Using XBB ==
In order to compile XBB, you need a few things:

You probably already have gcc and ld installed. To install dsss, follow the instructions [ here]. To install LDC, follow the instructions [ here].

You probably also want to have [[Using bochs|bochs]] installed for testing, unless you want to burn an .iso for every build.

We compile our D code with [[Using LDC|ldc]], our ASM with [[Using GCC|gcc]], [[Using ld|ld]] for linking, and [[Using DSSS|dsss]] for automated building. If you don't know how to install these, check the individual pages for instructions.

Once they are all installed, move into the build/ directory, and type
<pre>dsss build</pre>

If everything goes according to plan, you should have a nice, fresh xomb.iso at the top level of build/. You can try this out by typing
<pre>bochs -q</pre>
It'll use the bochsrc that's in the build directory to start everything up, and you should be good to go.

== XBB From Start to Finish ==

[[XBB From Start to Finish]] is a rundown of how the entire system works, from boot to kmain. It combines high level explanations with links to the relevant parts of our wiki, and the actual source code itself. It's intended to explain everything in enough detail for you to be able to start hacking around with the system after reading.

== XBB Organization ==

The XBB directory looks like this:
<pre>$ tree -L 1
|-- build
|-- kernel

2 directories, 2 files

We've moved all of the source into kernel, because you (at some point) will want to write userspace code. You'd probably want to make another directory in the main tree with all of that code in it. The main XOmB project has libos/ and tools/ and such.

=== LICENSE ===
XBB is distributed under the [ WTFPL]. This is the most free license we could possibly imagine that still contains a swear word, so have at it.

=== README ===
The readme contains a copy of this page, though it's not updated quite as often as this page is.

=== build/ ===
<pre> tree -L 1 build/
|-- bochsrc
|-- dsss.conf
|-- dsss.last
|-- dsss_objs
|-- iso
|-- linker.ld
|-- xomb.dump
`-- xomb.iso

2 directories, 6 files
==== bochsrc ====
Assuming you're running bochs, we've given you a bochsrc.

==== dsss.conf ====
This file tells dsss how to build XBB.

==== dsss.last ====
This is another file that dsss generates.

==== dsss_objs ====
This directory contains all of the intermediate stuff that dsss needs to do its job.

==== iso ====
This directory contains a copy of the actual FS contained in xomb.iso.

==== linker.ld ====
This script lets ld know how it should link everything together.

==== xomb.dump ====
A dump of the iso. Very useful for seeing exactly what asm gets generated after compiling things.

==== xomb.iso ====
This is the actual .iso file that needs to be burnt to a CD (or run in some other manner) to run the OS!

=== kernel/ ===
<pre>$ tree -L 1 kernel/
|-- arch
|-- config.d
|-- core
|-- dev
`-- runtime

4 directories, 1 file

==== arch ====
This directory contains everything pertaining to architecture. If you wanted to port XBB to arm or something, the code would go in here.

==== config.d ====
This sets a bunch of configuration options, mostly relating to debugging information.

==== core ====
This is where it all goes down. The core kernel code is located inside.

==== dev ====
Everything in this directory pertains to devices.

==== runtime ====
The kernel D runtime. This runtime is nowhere near as robust as a full userspace runtime would be, as the kernel doesn't need such niceties as garbage collection. Just the bare minimum, thanks.