Merge typo fix in usbinfo (see PR #178)
[helenos.git] / README.md
blob074709602ae526c5cb2a67898ddbccf5d4cd552b
1 # HelenOS
3 HelenOS is a portable microkernel-based multiserver operating
4 system designed and implemented from scratch. It decomposes key
5 operating system functionality such as file systems, networking,
6 device drivers and graphical user interface into a collection of
7 fine-grained user space components that interact with each other
8 via message passing. A failure or crash of one component does not
9 directly harm others. HelenOS is therefore flexible, modular,
10 extensible, fault tolerant and easy to understand.
12 ![screenshot](http://www.helenos.org/raw-attachment/wiki/Screenshots/screenshot.png "Screenshot")
14 HelenOS aims to be compatible with the C11 and C++14 standards, but does not
15 aspire to be a clone of any existing operating system and trades compatibility
16 with legacy APIs for cleaner design. Most of HelenOS components have been made
17 to order specifically for HelenOS so that its essential parts can stay free of
18 adaptation layers, glue code, franken-components and the maintenance burden
19 incurred by them.
21 * [Website](http://helenos.org)
22 * [Wiki](http://helenos.org/wiki)
23 * [Tickets](http://www.helenos.org/report/1)
24 * [How to contribute](http://www.helenos.org/wiki/HowToContribute)
26 ## Portability
28 HelenOS runs on eight different processor architectures and machines ranging
29 from embedded ARM devices and single-board computers through multicore 32-bit
30 and 64-bit desktop PCs to 64-bit Itanium and SPARC rack-mount servers.
32 ## Building
34 ### Building the toolchain
36 In order to build HelenOS, one must first build the cross-compiler toolchain
37 (either as a root or by specifying the `CROSS_PREFIX` environment variable)
38 by running (example for the amd64 architecture, further list of targets can be
39 found in the `default` directory):
41 ```
42 $ cd HelenOS/tools
43 $ ./toolchain.sh amd64
44 ```
46 The toolchain script will print a list of software packages that are required
47 for the toolchain to correctly build. Make sure you install all the dependencies.
48 Unfortunately, the script cannot install the required dependencies for you automatically
49 since the host environments are very diverse. In case the compilation of the toolchain
50 fails half way through, try to analyze the error message(s), add appropriate missing
51 dependencies and try again.
53 As an example, here are some of the packages you will need for Ubuntu 16.04:
55 ```
56 $ sudo apt install build-essential wget texinfo flex bison dialog python-yaml genisoimage
57 ```
59 Whereas for CentOS/Fedora, you will need:
61 ```
62 # sudo dnf group install 'Development Tools'
63 # sudo dnf install wget texinfo libmpc-devel mpfr-devel gmp-devel PyYAML genisoimage flex bison
64 ```
65 In case the toolchain script won't work no matter how hard you try, let us know.
66 Please supply as many relevant information (your OS and distribution, list of
67 installed packages with version information, the output of the toolchain script, etc.) as
68 possible.
70 ### Configuring the build
72 Since the summer of 2019, HelenOS uses the Meson build system.
73 Make sure you have a recent-enough version of Meson and Ninja.
74 The safest bet is installing both using `pip3` tool.
76 ```sh
77 $ pip3 install ninja
78 $ pip3 install meson
79 ```
81 Meson does not support in-tree builds, so you have to create a directory
82 for your build. You can have as many build directories as you want, each with
83 its own configuration. `cd` into your build directory and run `configure.sh`
84 script which exists in the source root. `configure.sh` can be run with a profile
85 name, to use one of the predefined profiles, or without arguments for interactive
86 configuration.
88 ```sh
89 $ git clone https://github.com/HelenOS/helenos.git
90 $ mkdir -p build/amd64
91 $ cd build/amd64
92 $ ../../helenos/configure.sh amd64
93 ```
95 Note: If you installed the toolchain to a custom directory, make sure `CROSS_PREFIX`
96 environment variable is correctly set.
98 Once configuration is finished, use `ninja` to build HelenOS.
99 Invoking `ninja` without arguments builds all binaries and
100 debug files, but not bootable image. This is because during
101 development, most builds are incremental and only meant to check
102 that code builds properly. In this case, the time-consuming process of
103 creating a boot image is not useful and takes most time. This behavior
104 might change in the future.
106 In case you want to rebuild the bootable image, you must invoke
107 `ninja image_path`. This also emits the name of the bootable image into the
108 file `image_path` in build directory.
111 $ ninja
112 $ ninja image_path
115 Now HelenOS should automatically start building.
117 ### Running the OS
119 When you get the command line back, there should be an `image.iso` file in the build
120 root directory. If you have QEMU, you should be able to start HelenOS by running:
123 $ ./tools/ew.py
126 For additional information about running HelenOS, see
127 [UsersGuide/RunningInQEMU](http://www.helenos.org/wiki/UsersGuide/RunningInQEMU) or
128 [UsersGuide/RunningInVirtualBox](http://www.helenos.org/wiki/UsersGuide/RunningInVirtualBox) or
129 see the files in tools/conf.
131 ## License
133 HelenOS is open source, free software. Its source code is available under
134 the BSD license. Some third-party components are licensed under GPL.