Skip to content

UIKit0/flux

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flux Operating System v0.7a

Introduction
*****************************************************************************

What is Flux?

Flux is a hobby operating system project designed and written by me (Nick
Johnson), since some time in late 2008. Currently, it consists of a 
microkernel, a C library, a shell and simple utilities, and a small set of 
device drivers. It should run on any standard PC hardware with a Pentium
or better processor, and uses 32 bit protected mode.

The Flux system is roughly UNIX-like in many areas, but it is mostly its
own system, and is not POSIX compliant. It has a particularly interesting
VFS mechanism that allows any process to act as not only a file, but a whole
mounted file system. It also is very fundamentally event-driven and 
multithreaded, which is good for driver writing and scalability over 
multiple processors (or at least it will be, once I get around to adding SMP 
support :P). It has been a sort of sandbox for my ideas, so there are plenty
of other interesting bits as well.

How do I use Flux?

At the moment, Flux is not stable enough for use, but it is rapidly 
progressing toward that point. It already can run a Lua interpreter, which
is written in standard C, and all of its source code can be compiled with
all warning flags and all optimization flags for both GCC and CLang (a feat,
I hear, which is unfortunately rarely seen in open source projects). The 
first beta release of Flux should be ready by January 2011. At that point, 
it should be ready for patches and other contributions.

Flux is available under the ISC license, which is a simplified BSD license.
In essence, this means you can freely modify and redistribute Flux, as long
as you keep the license and copyright information on each of the files that
contains it. The ISC license is a certified open source license, but you
can incorporate Flux code into closed source projects if you wish.

Why the name?

The name Flux originally referred to that acidic stuff in solder used to
remove oxides from metal: this reflects a planned feature of Flux involving
shared libraries, and more generally, the idea of reuse and recombination. 
However, I feel now that it also reflects another goal of the project: 
change. Flux is built in an extremely flexible fashion, not only because of
its layered design but also because of its brevity. Every piece of Flux is
small enough for a single person to completely understand, and if necessary,
to for a single person to rewrite. Documentation (at release at least) will
be comprehensive from the largest library down to the smallest function, to
facilitate those who wish to hack and rewrite.

Build Instructions
*****************************************************************************

Toolchain Dependencies:

C99 compliant C compiler
tested:
	CLang 2.7
tested flags:
	-O0, -O1, -Os, -O2, -O3
	-fomit-frame-pointer
	*all* warning flags under -pedantic -c99

The Netwide Assembler (NASM)
tested:
	NASM 2.05.01
	NASM 2.07
	NASM 2.08

ELF-based linker
tested:
	GNU binutils 2.18 for i686-pc-linux-gnu
	GNU binutils 2.19 for i586-elf
	GNU binutils 2.20 for i686-pc-linux-gnu

GNU Make or equivalent
tested: 
	GNU Make 3.81

*****************************************************************************

Testing Dependencies:

Linux 2.4 or newer with loopback support and cdrtools

QEMU emulator (or other VM - scripts will have to be modified)
tested:
	QEMU 0.10.6, i386 emulation level
	Bochs 2.4.1, i586 emulation level

*****************************************************************************

Build Instructions:

This system is meant to be built with x86 or x86_64 Linux as a host: it
may build and test on other Linux platforms, and will probably build on
any UNIX-like system.

To reliably build the system, you should use a cross-compiler. The official 
set of tools for this is CLang 2.8 and GNU Binutils 2.20 for the "i586-elf" 
target. At least binutils should be installed in <build_directory>/tools/, 
with at least "ar", "ld", and "ranlib" in <build_directory>/tools/bin/. 
CLang and NASM from the host system should both work without modification, 
but if in doubt, they should also be installed in the tools directory. The 
build scripts add the tools directory to your PATH, so that toolchain will 
override the host's.

To make each piece of the operating system, simply type "make 
<subproject>", or just "make" to make everything. The kernel, init, libc, 
and at least basic drivers must be built for the system to boot correctly. 
"make -C <subproject> clean" will remove all object files from the 
subprojects' directories, and "make clean" will remove all object files. 
"make image" will make a CD image called flux.iso in the run directory - 
this requires cdrtools.

Test Instructions:

To test the operating system, use "make test". This will make 
it run in a virtual machine: QEMU.

About

a hobby operating system written in C

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published