mirror of
				https://gitlab.com/sortix/sortix.git
				synced 2023-02-13 20:55:38 -05:00 
			
		
		
		
	Add documentation.
This commit is contained in:
		
							parent
							
								
									184fce3cf3
								
							
						
					
					
						commit
						425069cbf1
					
				
					 8 changed files with 1056 additions and 165 deletions
				
			
		
							
								
								
									
										15
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3,7 +3,7 @@ MAKEFILE_NOT_MEANT_FOR_SORTIX=1
 | 
			
		|||
include compiler.mak
 | 
			
		||||
include version.mak
 | 
			
		||||
 | 
			
		||||
MODULES=libc libm dispd games mkinitrd mxmpp utils bench ext mbr sortix
 | 
			
		||||
MODULES=doc libc libm dispd games mkinitrd mxmpp utils bench ext mbr sortix
 | 
			
		||||
 | 
			
		||||
ifndef SYSROOT
 | 
			
		||||
  SYSROOT:=$(shell pwd)/sysroot
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +86,7 @@ sysroot-overlay: sysroot-fsh sysroot-system
 | 
			
		|||
 | 
			
		||||
.PHONY: sysroot-user-skel
 | 
			
		||||
sysroot-user-skel: sysroot-fsh sysroot-system sysroot-overlay
 | 
			
		||||
	cp "$(SYSROOT)/share/doc/welcome" -t "$(SYSROOT)/etc/skel"
 | 
			
		||||
 | 
			
		||||
.PHONY: sysroot-home-directory
 | 
			
		||||
sysroot-home-directory: sysroot-fsh sysroot-system sysroot-overlay sysroot-user-skel
 | 
			
		||||
| 
						 | 
				
			
			@ -301,6 +302,14 @@ release-tar: $(SORTIX_RELEASE_DIR)/$(VERSION)/builds/$(BUILD_NAME).tar.xz
 | 
			
		|||
.PHONY: release-builds
 | 
			
		||||
release-builds: release-iso.xz release-deb release-tar
 | 
			
		||||
 | 
			
		||||
$(SORTIX_RELEASE_DIR)/$(VERSION)/doc: $(SORTIX_RELEASE_DIR)/$(VERSION) doc doc/*
 | 
			
		||||
	cp -R doc -T $(SORTIX_RELEASE_DIR)/$(VERSION)/doc
 | 
			
		||||
	rm -f $(SORTIX_RELEASE_DIR)/$(VERSION)/doc/.gitignore
 | 
			
		||||
	rm -f $(SORTIX_RELEASE_DIR)/$(VERSION)/doc/Makefile
 | 
			
		||||
 | 
			
		||||
.PHONY: release-doc
 | 
			
		||||
release-doc: $(SORTIX_RELEASE_DIR)/$(VERSION)/doc
 | 
			
		||||
 | 
			
		||||
$(SORTIX_RELEASE_DIR)/$(VERSION)/README: README $(SORTIX_RELEASE_DIR)/$(VERSION)
 | 
			
		||||
	cp $< $@
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -308,10 +317,10 @@ $(SORTIX_RELEASE_DIR)/$(VERSION)/README: README $(SORTIX_RELEASE_DIR)/$(VERSION)
 | 
			
		|||
release-readme: $(SORTIX_RELEASE_DIR)/$(VERSION)/README
 | 
			
		||||
 | 
			
		||||
.PHONY: release-arch
 | 
			
		||||
release-arch: release-builds release-readme
 | 
			
		||||
release-arch: release-builds release-doc release-readme
 | 
			
		||||
 | 
			
		||||
.PHONY: release-shared
 | 
			
		||||
release-shared: release-readme
 | 
			
		||||
release-shared: release-doc release-readme
 | 
			
		||||
 | 
			
		||||
.PHONY: release
 | 
			
		||||
release: release-arch release-shared
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										220
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										220
									
								
								README
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,200 +1,94 @@
 | 
			
		|||
The Sortix Operating System
 | 
			
		||||
===========================
 | 
			
		||||
Sortix is a hobby operating system. It was originally created as a tool to learn
 | 
			
		||||
more about kernel and operating system design and implementation. Today it is
 | 
			
		||||
gradually transforming into a real operating system. The standard library and
 | 
			
		||||
kernel is rich enough that some third party software can and has been ported to
 | 
			
		||||
Sortix. While the system remains limited, there have been added support for
 | 
			
		||||
bitmap graphics and proper filesystem support is being worked on. Unfortunately
 | 
			
		||||
there is no support for networking yet. The current release ships with various
 | 
			
		||||
test programs, utility programs and a few games and has support for rendering
 | 
			
		||||
the console in graphics mode.
 | 
			
		||||
 | 
			
		||||
The system aims to be an Unix-clone and is heavily based on POSIX. However, I've
 | 
			
		||||
drawn much inspiration from systems such as Plan 9, GNU/Hurd and MINIX. While
 | 
			
		||||
the system doesn't strive to be a microkernel (and today isn't), the plan is to
 | 
			
		||||
have user-space filesystems, per-process namespaces, subusers, and generally
 | 
			
		||||
give regular users more power that traditional Unix systems. If you are
 | 
			
		||||
interested, you can read about my design decisions at http://maxsi.org/blog/.
 | 
			
		||||
Sortix is a small Unix-like operating system developed since 2011 with emphasis
 | 
			
		||||
on cleaning up traditional Unix design mistakes while retaining compatibility
 | 
			
		||||
with third party software. Much third party software has been ported to Sortix
 | 
			
		||||
and the system is now self-building. The Sortix kernel, standard libraries, and
 | 
			
		||||
most utilities were written entirely from scratch.
 | 
			
		||||
 | 
			
		||||
Links
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
For more information, documentation and news, please visit the official website:
 | 
			
		||||
 | 
			
		||||
  http://sortix.org/
 | 
			
		||||
 | 
			
		||||
You can also download the newest release and cutting edge nightly builds at:
 | 
			
		||||
 | 
			
		||||
  https://cs.au.dk/~sortie/sortix/release/
 | 
			
		||||
 | 
			
		||||
You can retrieve the current git master from our gitorious project page at:
 | 
			
		||||
 | 
			
		||||
  https://gitorious.org/sortix/
 | 
			
		||||
 | 
			
		||||
System Requirements
 | 
			
		||||
-------------------
 | 
			
		||||
Sortix has very low system requirements. It also works well under virtual
 | 
			
		||||
machines such as VirtualBox and Qemu.
 | 
			
		||||
 | 
			
		||||
Sortix has low system requirements. It also works well under virtual machines
 | 
			
		||||
such as VirtualBox and Qemu - however Bochs is not officially supported:
 | 
			
		||||
 | 
			
		||||
* A 32-bit x86 (with SSE) or 64-bit x86_64 CPU.
 | 
			
		||||
* A dozen megabytes of RAM.
 | 
			
		||||
* A few dozen megabytes of RAM - or if you are using a cdrom release with ports
 | 
			
		||||
  then you likely need at least twice the size of the cdrom image.
 | 
			
		||||
* A harddisk or cdrom drive or support for booting from USB.
 | 
			
		||||
* A multiboot compliant bootloader if booting from harddisk.
 | 
			
		||||
* A Parallel ATA harddisk, if you wish to access it from Sortix. SATA is not
 | 
			
		||||
  supported yet.
 | 
			
		||||
 | 
			
		||||
Features
 | 
			
		||||
--------
 | 
			
		||||
The current development version of Sortix offers a traditional multi-process
 | 
			
		||||
protected environment with round-robin scheduling. A quick and dirty shell is
 | 
			
		||||
able to execute programs in foreground or background mode, handle IO redirection
 | 
			
		||||
and piping the standard output of a process into the standard input of another.
 | 
			
		||||
A real shell will be added as the system matures and I get around to finish the
 | 
			
		||||
work-in-progress shell.
 | 
			
		||||
Documentation
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
The official distribution contains a number of small utilities one would expect
 | 
			
		||||
on a unix system, such as cp, cat, ls, and so on. There are a lot of common
 | 
			
		||||
utilities missing as I haven't coded them yet. The purpose of the current
 | 
			
		||||
userspace is simply to test the system so don't expect too much.
 | 
			
		||||
You can find the documentation for Sortix use and development at your local
 | 
			
		||||
documentation mirror, for instance:
 | 
			
		||||
 | 
			
		||||
Unfortunately, for technical reasons, I don't distribute ported third party
 | 
			
		||||
software along with Sortix. This is largely because the build system sucks but
 | 
			
		||||
also that statically linked libraries are big and the initrd is already big
 | 
			
		||||
enough as it is. However, I have successfully ported binutils, gcc, gzip, zlib,
 | 
			
		||||
freetype, GNU hello, and more. Once proper filesystem support is merged, I can
 | 
			
		||||
distribute third party software separately and it can be mounted during boot.
 | 
			
		||||
  The documentation directory in a Sortix system:
 | 
			
		||||
  /share/doc
 | 
			
		||||
 | 
			
		||||
A number of small games is present and uses the VGA textmode to render ASCII
 | 
			
		||||
graphics. Notably you can play two-player Pong, or single-player Snake, or the
 | 
			
		||||
nice and Turing-complete Conway's Game of Life. There is also a small remake of
 | 
			
		||||
the asteroids game which uses 32-bit bitmap graphics. These are probably the
 | 
			
		||||
main attraction of the system for non-technical people.
 | 
			
		||||
  The doc directory inside the Sortix source repository:
 | 
			
		||||
  doc/
 | 
			
		||||
 | 
			
		||||
The Sortix kernel has very basic filesystem support. The root filesystem / is
 | 
			
		||||
simply a single-directory RAM filesystem. The init ramdisk is mounted read-only
 | 
			
		||||
on /bin and various devices are accessible through the /dev filesystem. Work is
 | 
			
		||||
underway to create an ext2 filesystem server, but it won't be of much use until
 | 
			
		||||
the kernel virtual filesystem is completed in the 0.8dev development cycle.
 | 
			
		||||
  The official Sortix website:
 | 
			
		||||
  http://sortix.org/doc/
 | 
			
		||||
 | 
			
		||||
There currently is no concept of users in the system (only the root user
 | 
			
		||||
exists). I decided to delay making a multi-user system until the base system is
 | 
			
		||||
in place. Note that there is only a single terminal - even though the system is
 | 
			
		||||
a multi-process system, there is only a single graphics framebuffer and there is
 | 
			
		||||
no framework for sharing it.
 | 
			
		||||
Building Sortix
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Improvements in Sortix 0.7
 | 
			
		||||
--------------------------
 | 
			
		||||
The 0.7 release improves greatly upon Sortix 0.6.
 | 
			
		||||
If you wish to build Sortix under Sortix itself, please consult the user guide:
 | 
			
		||||
 | 
			
		||||
* Multithreaded and fully preemptive kernel.
 | 
			
		||||
* Support for Streaming SIMD Extensions (SSE) and floating point numbers.
 | 
			
		||||
* Support for bitmap graphics through new /dev/video/ framework.
 | 
			
		||||
* Environmental variables.
 | 
			
		||||
* Rewritten and powerful initrd format.
 | 
			
		||||
* Init restarts the shell if it crashes.
 | 
			
		||||
* BGA graphics driver.
 | 
			
		||||
* Console rendering in graphics mode.
 | 
			
		||||
* Asteroids remake.
 | 
			
		||||
* Improved signal handling.
 | 
			
		||||
* VEOF support in terminal driver and shell.
 | 
			
		||||
* Various shell improvements.
 | 
			
		||||
* Implement scanf function family.
 | 
			
		||||
* Support for using PAT and MTRR to speed up video memory access.
 | 
			
		||||
* Countless improvements to the kernel and the standard library.
 | 
			
		||||
  $MY_LOCAL_DOCUMENTATION_MIRROR/user-guide
 | 
			
		||||
 | 
			
		||||
In addition, a BIOS call driver was created during the 0.7 cycle as well as a
 | 
			
		||||
VBE graphics driver. However, the BIOS driver only worked on 32-bit CPUs and
 | 
			
		||||
hence wasn't merged in time. As the VBE driver depended on it, it was cut too.
 | 
			
		||||
If you wish to cross-build Sortix from another operating system, please read
 | 
			
		||||
the cross development guide:
 | 
			
		||||
 | 
			
		||||
Known bugs
 | 
			
		||||
----------
 | 
			
		||||
There is currently a lot of bugs and small quirks in Sortix. They are caused by
 | 
			
		||||
the system being young and incomplete. They will gradually be fixed as the base
 | 
			
		||||
system improves. They are tolerated in the releases because they are not
 | 
			
		||||
critical and improvement situation from the last release.
 | 
			
		||||
  $MY_LOCAL_DOCUMENTATION_MIRROR/cross-development
 | 
			
		||||
 | 
			
		||||
The shell only looks at whitespace when parsing input lines. This means that
 | 
			
		||||
operators such as & ; and | must be surrounded by whitespace on both sides.
 | 
			
		||||
While quotes aren't implemented, you can work around this by using backslahes
 | 
			
		||||
to escape all characters except newlines. The shell does not accept very long
 | 
			
		||||
lines yet.
 | 
			
		||||
Documentation
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
Some programs change the format of the terminal standard input delivered to
 | 
			
		||||
them. For instance, the pong game needs to capture every keyboard event. However
 | 
			
		||||
running such programs at the same time as programs that need proper line-
 | 
			
		||||
buffered input (such as the shell) causes conflicts and neither program gets
 | 
			
		||||
what it needs causing programs to exit or crash. Note that if the shell fails
 | 
			
		||||
to read in its expected format, it exits with an error code. This issue is
 | 
			
		||||
caused by the design of the terminal system and can't be fixed until it is
 | 
			
		||||
rewritten.
 | 
			
		||||
Basic usage of the system has been documented at:
 | 
			
		||||
 | 
			
		||||
The editor can only run in 80x25 terminal resolutions. This is because it is
 | 
			
		||||
very hacky and was written before malloc worked. This will be fixed when the
 | 
			
		||||
editor is rewritten.
 | 
			
		||||
 | 
			
		||||
The filesystem is currently hacked together in the kernel. When things go wrong
 | 
			
		||||
you may experience the utilities returning the wrong error codes. This is
 | 
			
		||||
harmless but confusing. All the current kernel filesystem code will be replaced
 | 
			
		||||
a user-space filesystem framework and will be present in the next release.
 | 
			
		||||
 | 
			
		||||
The system can partially deadlock if a process exits and zombie children are not
 | 
			
		||||
collected yet.
 | 
			
		||||
 | 
			
		||||
Improvements scheduled for Sortix 0.8
 | 
			
		||||
-------------------------------------
 | 
			
		||||
* New build system based on cross compilation and package management.
 | 
			
		||||
* Merge BIOS and VBE drivers.
 | 
			
		||||
* Kernel virtual filesystem.
 | 
			
		||||
* User-space filesystem framework.
 | 
			
		||||
* User-space ext2 filesystem driver.
 | 
			
		||||
* Refactor and extend the standard library.
 | 
			
		||||
* Mount-points.
 | 
			
		||||
* Improved terminal framework.
 | 
			
		||||
* New and improved shell.
 | 
			
		||||
* Copy-on-write in fork(2) and mmap(2).
 | 
			
		||||
* Pointer-safe system calls.
 | 
			
		||||
* And various misc. improvements.
 | 
			
		||||
 | 
			
		||||
Technical details
 | 
			
		||||
----------------
 | 
			
		||||
The system is mostly coded in C++, but also contains a few files in C. However,
 | 
			
		||||
the user-land experiences a normal C programming interface as per POSIX.
 | 
			
		||||
Executable files natively uses the ELF format used on GNU/Linux and other
 | 
			
		||||
systems. There is no shared library support yet, but it'll be possible when I
 | 
			
		||||
get around to implement copy-on-write memory, mmap(2) and swapping to disk.
 | 
			
		||||
 | 
			
		||||
Building
 | 
			
		||||
--------
 | 
			
		||||
To build the Sortix source code you need to install a few dependencies. First of
 | 
			
		||||
all you need the GNU Compiler Collection (C and C++), GNU Make, and GNU
 | 
			
		||||
Binutils. You then need to build and install the included macro preprocessor
 | 
			
		||||
(mxmpp) somewhere in your PATH such as /usr/bin. You need a GNU/Linux build
 | 
			
		||||
system to build Sortix, although, it wouldn't be difficult to port the build
 | 
			
		||||
system to other platforms. You can then build the Sortix kernel and user-space
 | 
			
		||||
utilities by running make in the Sortix root source directory. By default it
 | 
			
		||||
will build to your CPU architecture (64-bit on 64-bit systems, 32-bit otherwise).
 | 
			
		||||
Use CPU=x86 or CPU=x64 as arguments to make to control which target is built.
 | 
			
		||||
 | 
			
		||||
To build a bootable ISO you need GNU GRUB 2, as that is used by "make iso" to
 | 
			
		||||
generate the iso. In turn, GNU GRUB relies on xorriso to create the iso file.
 | 
			
		||||
 | 
			
		||||
You can burn the ISO to a cdrom or dvd, or even dd(1) it onto a USB memory stick
 | 
			
		||||
and boot from if it your BIOS supports it. You can also provide it to a virtual
 | 
			
		||||
machine. Alternatively you can install the kernel binary and initrd in your
 | 
			
		||||
/boot directory and configure GRUB to boot Sortix.
 | 
			
		||||
 | 
			
		||||
Links
 | 
			
		||||
-----
 | 
			
		||||
You can visit the official website at http://www.maxsi.org/software/sortix/ for
 | 
			
		||||
more information and news. You can also download the newest release and cutting
 | 
			
		||||
edge nightly builds from https://cs.au.dk/~sortie/sortix/release/.
 | 
			
		||||
 | 
			
		||||
You can retrieve the current git master from our gitorious project page from
 | 
			
		||||
https://gitorious.org/sortix/.
 | 
			
		||||
 | 
			
		||||
You can read my blog where I discuss various design decisions in Sortix at
 | 
			
		||||
http://maxsi.org/blog/.
 | 
			
		||||
  $MY_LOCAL_DOCUMENTATION_MIRROR/user-guide
 | 
			
		||||
 | 
			
		||||
License
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
Copyright(C) Jonas 'Sortie' Termansen <sortie@maxsi.org> and contributors 2011,
 | 
			
		||||
2012.
 | 
			
		||||
2012, 2013.
 | 
			
		||||
 | 
			
		||||
Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
 | 
			
		||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
			
		||||
PARTICULAR PURPOSE. See the gpl.html and lgpl.html files for more information.
 | 
			
		||||
PARTICULAR PURPOSE. See the COPYING-GPL and COPYING-LGPL files for more
 | 
			
		||||
information.
 | 
			
		||||
 | 
			
		||||
See the individual files for copyright terms. If a file does not contain a
 | 
			
		||||
license header, you can assume it is released under the GNU General Public
 | 
			
		||||
Licenser, either version 3 or (at your option) any later version. This includes
 | 
			
		||||
Sortix-related experimental branches and repositories found on Gitorious: these
 | 
			
		||||
things are so experimental that I didn't add copyright statements.
 | 
			
		||||
things are so experimental that I might not have added copyright statements.
 | 
			
		||||
 | 
			
		||||
The build scripts might not contain a copyright license in which case they are
 | 
			
		||||
covered by the standard license for the software component they relate to.
 | 
			
		||||
 | 
			
		||||
Unless the license header in the source code states otherwise, the Sortix
 | 
			
		||||
kernel, the filesystem servers, the initrd tools, the utilities, the games, and
 | 
			
		||||
| 
						 | 
				
			
			@ -202,5 +96,7 @@ the benchmark programs are licensed under the GNU General Public License, either
 | 
			
		|||
version 3 or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
Unless the license header in the source code states otherwise, the libc library
 | 
			
		||||
s licensed under the GNU Lesser General Public License, either version 3 or (at
 | 
			
		||||
your option) any later version.
 | 
			
		||||
and the libdispd library are licensed under the GNU Lesser General Public
 | 
			
		||||
License, either version 3 or (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
The Sortix math library (libm) is licensed as described in the libm/LEGAL file.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								doc/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
index.html
 | 
			
		||||
							
								
								
									
										19
									
								
								doc/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/Makefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
include ../compiler.mak
 | 
			
		||||
include ../version.mak
 | 
			
		||||
include ../dirs.mak
 | 
			
		||||
 | 
			
		||||
DOCUMENTS:=\
 | 
			
		||||
cross-development \
 | 
			
		||||
obsolete-stuff \
 | 
			
		||||
user-guide \
 | 
			
		||||
welcome \
 | 
			
		||||
 | 
			
		||||
all: $(BINARIES)
 | 
			
		||||
 | 
			
		||||
.PHONY: all install clean
 | 
			
		||||
 | 
			
		||||
install: all
 | 
			
		||||
	mkdir -p $(DESTDIR)$(DOCDIR)
 | 
			
		||||
	cp -t $(DESTDIR)$(DOCDIR) $(DOCUMENTS)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
							
								
								
									
										198
									
								
								doc/cross-development
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										198
									
								
								doc/cross-development
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,198 @@
 | 
			
		|||
Sortix Cross Development Guide
 | 
			
		||||
==============================
 | 
			
		||||
 | 
			
		||||
The primary way to build Sortix is on Sortix itself. However, the system may not
 | 
			
		||||
be fully up to the task yet and your favorite development environment may not
 | 
			
		||||
have been ported. You can cross-compile Sortix from a reasonable similar system
 | 
			
		||||
such as GNU+Linux. The build process will liberally use common GNU tool options,
 | 
			
		||||
so you may wish to install the basic GNU distribution or compatible.
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
To build Sortix you need these components:
 | 
			
		||||
 | 
			
		||||
* Sortix source tree
 | 
			
		||||
* Sortix binutils
 | 
			
		||||
* Sortix gcc
 | 
			
		||||
* GRUB2 (iso support)
 | 
			
		||||
* xorriso (iso support)
 | 
			
		||||
 | 
			
		||||
In this tutorial we will cross-compile a Sortix using by following these steps:
 | 
			
		||||
 | 
			
		||||
1. Retrieve all the source code.
 | 
			
		||||
2. Build additional Sortix-specific tool programs.
 | 
			
		||||
3. Create a system root containing all the Sortix system headers.
 | 
			
		||||
4. Compile a new compiler that targets Sortix and uses the system root.
 | 
			
		||||
5. Actually compile Sortix.
 | 
			
		||||
 | 
			
		||||
It is necessary to compile binutils and gcc because your system compilers
 | 
			
		||||
doesn't produce executables for Sortix, but rather for your current system.
 | 
			
		||||
 | 
			
		||||
Source Code
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
You can find the latest Sortix source code at:
 | 
			
		||||
https://gitorious.org/sortix/sortix/
 | 
			
		||||
 | 
			
		||||
You can find the latest Sortix binutils source code at:
 | 
			
		||||
https://cs.au.dk/~sortie/sortix/toolchain/sortix-binutils-latest.tar.xz
 | 
			
		||||
 | 
			
		||||
You can find the latest Sortix gcc source code at:
 | 
			
		||||
https://cs.au.dk/~sortie/sortix/toolchain/sortix-gcc-latest.tar.xz
 | 
			
		||||
 | 
			
		||||
It is only possible to build Sortix with this blessed toolchain or a derivative
 | 
			
		||||
thereof as it has been customized to understand Sortix and provide a number of
 | 
			
		||||
useful extensions. You may need to occasionally upgrade the toolchain, in the
 | 
			
		||||
event that it is further modified and Sortix takes advantage of these changes.
 | 
			
		||||
 | 
			
		||||
Target Platform
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
You need to decide what the platform your final Sortix system will run on. You
 | 
			
		||||
can currently decide between i486-sortix and x86_64-sortix. In this guide we
 | 
			
		||||
will refer to that platform triplet as $SORTIX_PLATFORM. If you want to build
 | 
			
		||||
another platform afterwards, then you will have to follow this guide again.
 | 
			
		||||
 | 
			
		||||
Cross-Environment
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
You should install your cross-toolchain into a useful and isolated directory
 | 
			
		||||
such as $HOME/opt/$SORTIX_PLATFORM. This allows you to easily dispose of the
 | 
			
		||||
directory and keeps it neatly isolated from the rest of the system. Let's refer
 | 
			
		||||
to that location as $CROSS_PREFIX.
 | 
			
		||||
 | 
			
		||||
You need to add $CROSS_PREFIX/bin to your $PATH variable:
 | 
			
		||||
 | 
			
		||||
  export PATH="$CROSS_PREFIX/bin:$PATH"
 | 
			
		||||
 | 
			
		||||
This will modify the $PATH variable in this particular shell session. Depending
 | 
			
		||||
on your shell and system configuration you can make this permanent by adding
 | 
			
		||||
that line to your ~/.profile. Consult your shell documentation. Otherwise type
 | 
			
		||||
it in all Sortix-related shells before doing anything.
 | 
			
		||||
 | 
			
		||||
Sortix build tools
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
You need to install some additional Sortix programs into your local environment
 | 
			
		||||
as they are needed to build Sortix. Assuming you cloned the Sortix source code
 | 
			
		||||
tree into the ~/sortix directory, you can install them by typing the following
 | 
			
		||||
commands:
 | 
			
		||||
 | 
			
		||||
  cd ~/sortix &&
 | 
			
		||||
  make PREFIX="$CROSS_PREFIX" build-tools &&
 | 
			
		||||
  make PREFIX="$CROSS_PREFIX" install-build-tools
 | 
			
		||||
 | 
			
		||||
These tools produce platform independent output so you may wish to install them
 | 
			
		||||
into $HOME/bin or /usr/local/bin or where it suits you in your $PATH.
 | 
			
		||||
 | 
			
		||||
Setting up basic system root
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
The compiler has been taught how to correctly build programs for a Sortix
 | 
			
		||||
system, however it gets part of this information from the system headers. The
 | 
			
		||||
first step is to create a basic system root that contains the headers and
 | 
			
		||||
filesystem structure for the final system. We will install the kernel, libc,
 | 
			
		||||
libm, and other core library headers into this directory. Run the following:
 | 
			
		||||
 | 
			
		||||
  cd ~/sortix &&
 | 
			
		||||
  make sysroot-base-headers HOST=$SORTIX_PLATFORM
 | 
			
		||||
 | 
			
		||||
This will automatically set up a basic system root in ~/sortix/sysroot. We will
 | 
			
		||||
use this when we build the cross-compiler in a moment. Let's call the system
 | 
			
		||||
root directory $SYSROOT.
 | 
			
		||||
 | 
			
		||||
Cross-Toolchain Dependencies
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
You may need to install these packages (and their development packages) before
 | 
			
		||||
building binutils and gcc, or the packages will refuse to configure or some
 | 
			
		||||
obscure error will occur. In particular, you may need to install:
 | 
			
		||||
 | 
			
		||||
* Bison
 | 
			
		||||
* Flex
 | 
			
		||||
* GNU GMP
 | 
			
		||||
* GNU MPFR
 | 
			
		||||
* GNU MPC
 | 
			
		||||
 | 
			
		||||
You should consult the official binutils and gcc documentation on what exactly
 | 
			
		||||
you need to install before building these packages yourself.
 | 
			
		||||
 | 
			
		||||
Cross-Binutils
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
We need a cross-binutils that have been taught the Sortix program format. If you
 | 
			
		||||
have extracted the Sortix binutils source code into ~/src/sortix-binutils then
 | 
			
		||||
you can build binutils out-of-directory using these commands:
 | 
			
		||||
 | 
			
		||||
  mkdir ~/src/binutils-build &&
 | 
			
		||||
  cd ~/src/binutils-build &&
 | 
			
		||||
  ../sortix-binutils/configure \
 | 
			
		||||
    --target=$SORTIX_PLATFORM \
 | 
			
		||||
    --with-sysroot="$SYSROOT" \
 | 
			
		||||
    --prefix="$CROSS_PREFIX" \
 | 
			
		||||
    --program-prefix=$SORTIX_PLATFORM- &&
 | 
			
		||||
  make &&
 | 
			
		||||
  make install
 | 
			
		||||
 | 
			
		||||
You may need to install some dependencies before you build binutils. You can
 | 
			
		||||
remove the temporary ~/src/binutils-build directory when you are done.
 | 
			
		||||
 | 
			
		||||
Cross-GCC
 | 
			
		||||
---------
 | 
			
		||||
 | 
			
		||||
We need a cross-compiler that has been taught what Sortix is and that supports a
 | 
			
		||||
few extensions that have been added to Sortix gcc that isn't present in upstream
 | 
			
		||||
gcc. If you have extracted the Sortix gcc source code into ~/src/sortix-gcc then
 | 
			
		||||
you can build gcc out-of-directory using these commands.
 | 
			
		||||
 | 
			
		||||
  mkdir ~/src/gcc-build &&
 | 
			
		||||
  cd ~/src/gcc-build &&
 | 
			
		||||
  ../sortix-gcc/configure \
 | 
			
		||||
    --target=$SORTIX_PLATFORM \
 | 
			
		||||
    --with-sysroot=$SYSROOT \
 | 
			
		||||
    --prefix="$CROSS_PREFIX" \
 | 
			
		||||
    --enable-languages=c,c++ \
 | 
			
		||||
    --program-prefix=$SORTIX_PLATFORM- &&
 | 
			
		||||
  make all-gcc all-target-libgcc &&
 | 
			
		||||
  make install-gcc install-target-libgcc
 | 
			
		||||
 | 
			
		||||
You may need to install some dependencies before you build gcc, such as libmpc,
 | 
			
		||||
libmpfr and libgmp. You can remove the temporary ~/src/gcc-build directory when
 | 
			
		||||
you are done. Notice how we don't build all of gcc as this isn't possible yet.
 | 
			
		||||
For instance, the C++ library requires the Sortix libc to have been built.
 | 
			
		||||
 | 
			
		||||
Building Sortix
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
You now have the needed components to build a working Sortix system. If you have
 | 
			
		||||
completed the above steps correctly, then you can simply do:
 | 
			
		||||
 | 
			
		||||
  cd ~/sortix &&
 | 
			
		||||
  make HOST=$SORTIX_PLATFORM
 | 
			
		||||
 | 
			
		||||
This will compile a basic Sortix system into ~/sortix/sysroot with a kernel,
 | 
			
		||||
headers, libraries, programs, everything you need. This isn't a bootable system
 | 
			
		||||
yet. If you have xorriso and grub-mkrescue from GRUB 2 installed, then you can
 | 
			
		||||
can build a bootable .iso by typing:
 | 
			
		||||
 | 
			
		||||
  cd ~/sortix &&
 | 
			
		||||
  make HOST=$SORTIX_PLATFORM sortix.iso
 | 
			
		||||
 | 
			
		||||
This will produce a ~/sortix/sortix.iso file that is bootable on real hardware
 | 
			
		||||
and virtual machines. Alternatively, you can take the sortix.bin file and boot
 | 
			
		||||
that with GRUB as a multiboot kernel and sortix.initrd (snapshot of the sysroot)
 | 
			
		||||
as a multiboot module/initrd.
 | 
			
		||||
 | 
			
		||||
You can clean the source directory fully:
 | 
			
		||||
 | 
			
		||||
  cd ~/sortix &&
 | 
			
		||||
  make distclean
 | 
			
		||||
 | 
			
		||||
This will clean all the source directories and ports and delete all the builds
 | 
			
		||||
and the binary package repositories (if you use ports as below) and it will
 | 
			
		||||
delete the system root containing your installed system. Alternatively, you may
 | 
			
		||||
be interested in the target `mostlyclean `that doesn't delete binary packages
 | 
			
		||||
for ports, as they may take considerable time to recompile. See also the targets
 | 
			
		||||
`clean`, `clean-core`, `clean-sysroot`, `clean-repository`, `clean-builds`,
 | 
			
		||||
and `clean-ports` which lets you control what is cleaned.
 | 
			
		||||
							
								
								
									
										215
									
								
								doc/obsolete-stuff
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								doc/obsolete-stuff
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,215 @@
 | 
			
		|||
Obsolete Stuff
 | 
			
		||||
==============
 | 
			
		||||
 | 
			
		||||
One of the primary design goals of Sortix is to be a modern Unix system with the
 | 
			
		||||
old cruft removed. This means that some features/functions/headers in the C API
 | 
			
		||||
has been removed, never implemented in the first place, or is scheduled for
 | 
			
		||||
future removal. This is likely inconvenient, as a lot of programs still rely on
 | 
			
		||||
these obsolete/broken features, which will have to be fixed. Additionally, it'll
 | 
			
		||||
further complicate porting programs to Sortix. However, it is our belief that
 | 
			
		||||
ultimately such removals will be beneficial and this is merely a transitional
 | 
			
		||||
period. In almost all cases, we have made available superior interfaces that can
 | 
			
		||||
be used instead.
 | 
			
		||||
 | 
			
		||||
It may cause problems for portable programs that these features cannot or should
 | 
			
		||||
not be used, as lesser operating systems may not implement the modern
 | 
			
		||||
replacements. Either fix such systems or add some feature detection magic.
 | 
			
		||||
 | 
			
		||||
This is a list of common features that may currently be implemented, but that
 | 
			
		||||
you shouldn't use and if you do, then you should fix your program before it
 | 
			
		||||
breaks when the feature is finally removed.
 | 
			
		||||
 | 
			
		||||
You might be tempted to use a preprocessor conditional for __sortix__ to detect
 | 
			
		||||
the absence of these obsolete features and the availability of their modern
 | 
			
		||||
replacements. Keep in mind that other systems may have the modern replacements
 | 
			
		||||
and also may have removed features, and that they may supply other extensions to
 | 
			
		||||
replace the features. If you need to be portable, you should use whatever means
 | 
			
		||||
to automatically detect the availability of features at compile time, rather
 | 
			
		||||
than hardcode cases for each platform, as your software is likely to be ported
 | 
			
		||||
to platforms that didn't exist when you wrote your code.
 | 
			
		||||
 | 
			
		||||
asctime, asctime_r
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
This function is fundamentally broken. It doesn't support locales, it adds some
 | 
			
		||||
useless newline character at the end, the date format doesn't comply with ISO
 | 
			
		||||
standards, asctime is not thread safe, and so on. Actually, the POSIX standard
 | 
			
		||||
supplies code that implements the function because the format simply cannot
 | 
			
		||||
change. The function was actually already deprecated back in 1989 when the
 | 
			
		||||
original C standard was released. The solution is today the same as back then,
 | 
			
		||||
simply use the much superior strftime function instead. asctime_r tries to make
 | 
			
		||||
the function thread safe, but it doesn't fix the other broken semantics. The
 | 
			
		||||
only use of this function is to participate in protocols that somehow manages to
 | 
			
		||||
use asctime formatted dates, but then you might as well just paste in the POSIX
 | 
			
		||||
example code and hard code it in your program.
 | 
			
		||||
 | 
			
		||||
Sortix currently implement these functions for compatibility reasons.
 | 
			
		||||
 | 
			
		||||
creat
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
Use open() instead of this poorly named function. Additionally, open() has a
 | 
			
		||||
similarly poorly named flag O_CREAT that does what you need.
 | 
			
		||||
 | 
			
		||||
Sortix currently implement this function for compatibility reasons.
 | 
			
		||||
 | 
			
		||||
ctime, ctime_r
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
These functions are defined in terms of asctime and asctime_r. Therefore they
 | 
			
		||||
will need to be removed as well.
 | 
			
		||||
 | 
			
		||||
Sortix currently implement these functions for compatibility reasons.
 | 
			
		||||
 | 
			
		||||
ftime
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
Use clock_gettime instead.
 | 
			
		||||
 | 
			
		||||
gethostbyname, gethostbyname
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
Use the protocol agnostic functions such as getaddrinfo(). For instance, if you
 | 
			
		||||
want a HTTP connection to www.example.com, do you really care how the data get
 | 
			
		||||
to and from there? Most of the time you want a reliable transport protocol to a
 | 
			
		||||
named host, but don't care much about the low-level details. If you use these
 | 
			
		||||
modern networking interfaces, then your program can use without modification
 | 
			
		||||
IPv4, IPv6, or whatever new protocol is used in the future.
 | 
			
		||||
 | 
			
		||||
getpgrp
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
POSIX and BSD disagree on the function prototype for getpgrp. Use getpgid
 | 
			
		||||
instead, as everyone agrees on that.
 | 
			
		||||
 | 
			
		||||
gets
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
Use fgets or getline instead. This function has been removed in the latest C
 | 
			
		||||
standard, but most implementations carry it anyways. Curiously it is hated so
 | 
			
		||||
much that some compatibility libraries such as gnulib actively use magic to add
 | 
			
		||||
deprecation warnings not to use it, but these won't compile because gets isn't
 | 
			
		||||
declared in any Sortix headers.
 | 
			
		||||
 | 
			
		||||
gettimeofday
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Use clock_gettime instead.
 | 
			
		||||
 | 
			
		||||
getwd
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
Use get_current_dir_name() or getcwd() instead. Don't rely on the existence of
 | 
			
		||||
PATH_MAX, but allocate buffers as needed.
 | 
			
		||||
 | 
			
		||||
isascii
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
This function is rather pointless. If we use a character encoding that wasn't
 | 
			
		||||
ascii compatible, then it doesn't make sense. If we use a sane character
 | 
			
		||||
encoding such as UTF-8, then you can simply check if the value is at most 127.
 | 
			
		||||
 | 
			
		||||
PATH_MAX
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
There is no such limit in Sortix. The kernel might restrict the path lengths at
 | 
			
		||||
some point, but that'll just be to protect against misbehaving processes. You
 | 
			
		||||
can use pathconf() or fpathconf() to see if a particular path has a limit, but
 | 
			
		||||
otherwise you should just allocate strings as much as needed. There should be
 | 
			
		||||
functions in place so you can use paths of any length. If you really need a
 | 
			
		||||
limit as a hack to fix a broken program, you can do something like:
 | 
			
		||||
 | 
			
		||||
    #if !defined(PATH_MAX) && defined(__sortix__)
 | 
			
		||||
    #define PATH_MAX 32768
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
If there is ever going to be a path limit, it'll probably be either this value
 | 
			
		||||
or higher. Ideally, your programs ought to work with paths of any reasonable
 | 
			
		||||
length.
 | 
			
		||||
 | 
			
		||||
sdl-config
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
This SDL utility program is basically broken for cross-compilation and seems to
 | 
			
		||||
be a poor counterpart to to pkg-config. If you insist on using such config
 | 
			
		||||
tools, use pkg-config instead as it causes fewer problems. If you really need a
 | 
			
		||||
sdl-config script, implement it using pkg-config:
 | 
			
		||||
 | 
			
		||||
    pkg-config "$@" sdl
 | 
			
		||||
 | 
			
		||||
The Sortix build system actually injects such a sdl-config into the PATH to make
 | 
			
		||||
sure programs don't use the wrong SDL libraries when cross-compiling.
 | 
			
		||||
 | 
			
		||||
setpgrp
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
POSIX and BSD disagree on the function prototype for setpgrp. Use setpgid
 | 
			
		||||
instead, as everyone agrees on that.
 | 
			
		||||
 | 
			
		||||
settimeofday
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Use clock_settime instead.
 | 
			
		||||
 | 
			
		||||
strings.h
 | 
			
		||||
---------
 | 
			
		||||
 | 
			
		||||
There must have been some confusion back in the day since this header was
 | 
			
		||||
created, rather than the functions just added to string.h. In sane
 | 
			
		||||
implementations, you can just include string.h that also declares these
 | 
			
		||||
functions. The strings.h header exists in Sortix for source-code compatibility,
 | 
			
		||||
but don't be surprised if it just includes the regular string.h.
 | 
			
		||||
 | 
			
		||||
struct timeval
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
This microsecond precision data structure has been fully replaced by struct
 | 
			
		||||
timespec, which offers nanosecond precision. All kernel APIs use struct timespec
 | 
			
		||||
exclusively.
 | 
			
		||||
 | 
			
		||||
Sortix currently provides this structure for compatibility reasons.
 | 
			
		||||
 | 
			
		||||
sys/param.h
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
This is a BSD header that contains a bunch of BSD-specific stuff and other
 | 
			
		||||
miscellaneous junk. The GNU libc implementation contains some uselese macros
 | 
			
		||||
that doesn't justify its existence. The header inclusion can often be deleted
 | 
			
		||||
without any problems, but older systems may require its inclusion.
 | 
			
		||||
 | 
			
		||||
sys/time.h
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
You don't need this header and it'll be removed at some point. It is filled with
 | 
			
		||||
obsolete functions and macros. The only reason you might want it is to get the
 | 
			
		||||
declaration of struct timeval, but that data type has been replaced by struct
 | 
			
		||||
timespec.
 | 
			
		||||
 | 
			
		||||
Sortix currently provides this header for compatibility reasons.
 | 
			
		||||
 | 
			
		||||
sys/timeb.h
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
This is a header that contains the ftime function that has been replaced, this
 | 
			
		||||
header has been removed as well.
 | 
			
		||||
 | 
			
		||||
tmpnam
 | 
			
		||||
------
 | 
			
		||||
 | 
			
		||||
There is an inherently race condition prone and has thread safely issues with a
 | 
			
		||||
NULL argument. Use tmpfile() instead if you can do with a file whose name you do
 | 
			
		||||
not know. Unfortunately, Sortix has yet no satisfying temporary file creation
 | 
			
		||||
function that gives you a file and its name without having to deal with silly
 | 
			
		||||
template strings and other problems.
 | 
			
		||||
 | 
			
		||||
utime
 | 
			
		||||
-----
 | 
			
		||||
 | 
			
		||||
Use utimens instead, or perhaps the more portable utimensat.
 | 
			
		||||
 | 
			
		||||
Sortix currently provides this function for compatibility reasons.
 | 
			
		||||
 | 
			
		||||
utimes
 | 
			
		||||
------
 | 
			
		||||
 | 
			
		||||
Use utimens instead, or perhaps the more portable utimensat.
 | 
			
		||||
							
								
								
									
										546
									
								
								doc/user-guide
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										546
									
								
								doc/user-guide
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,546 @@
 | 
			
		|||
Sortix User Guide
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
Thanks for your interest in Sortix! This document will describe how to use it
 | 
			
		||||
and what features are available. Sortix is a small self-compiling Unix-like
 | 
			
		||||
Operating System developed since 2011. The system is free software licensed
 | 
			
		||||
under the GNU General Public License and other licenses.
 | 
			
		||||
 | 
			
		||||
Introduction
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
If you are using a Sortix live medium or a prebuilt harddisk image, you will
 | 
			
		||||
likely be met with a bootloader. Normally, GNU GRUB is used as the Sortix
 | 
			
		||||
bootloader. In that case, simply pick Sortix from the boot menu. If you have
 | 
			
		||||
installed Sortix manually, you will have to configure your bootloader to boot
 | 
			
		||||
Sortix.
 | 
			
		||||
 | 
			
		||||
The bootloader will then load the Sortix kernel and start the system. The
 | 
			
		||||
initialization process will spawn a shell shortly. The command line is similar
 | 
			
		||||
to those of Unix systems and many common Unix commands are available.
 | 
			
		||||
 | 
			
		||||
Keyboard Layout
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Only the US Keyboard layout remains supported at this time. Adding new layouts
 | 
			
		||||
to the kernel is simple, but the system only supports ASCII text, making support
 | 
			
		||||
for international keyboard layouts pointless at this time. Eventually, a program
 | 
			
		||||
in user-space will be able to decode the keyboard scancodes, making it no longer
 | 
			
		||||
a kernel problem.
 | 
			
		||||
 | 
			
		||||
Changing the Video Mode
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
After boot, the screen resolution will be default be in VGA text mode. This only
 | 
			
		||||
allows 80 columns and 25 rows of 16 color ASCII text. Naturally, this is very
 | 
			
		||||
limited but works on most systems.
 | 
			
		||||
 | 
			
		||||
You can change the display resolution using the `chvideomode` program. However,
 | 
			
		||||
you need a suitable kernel driver to do the mode setting. The current release
 | 
			
		||||
only has a simple BGA driver, which works in virtual machines such as Qemu,
 | 
			
		||||
VirtualBox or Bochs. A VBE driver also exists, however, it is not yet merged
 | 
			
		||||
into the mainline version because it causes problems on x86_64 due to missing
 | 
			
		||||
BIOS call support. Note that some programs does not work outside of VGA Text
 | 
			
		||||
Mode because the dispd library doesn't yet have a VGA->framebuffer converter.
 | 
			
		||||
 | 
			
		||||
The BGA driver can support virtually any resolution, but since the interface
 | 
			
		||||
fails to report which resolutions are appropriate in the current context, I have
 | 
			
		||||
simply hard-coded whatever resolutions I found reasonable when I wrote it.
 | 
			
		||||
 | 
			
		||||
Powering Off
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
Unless you are using a harddisk image or your initrd has been specially
 | 
			
		||||
configured to mount a permanent root filesystem, then this environment is
 | 
			
		||||
entirely temporary. You will loose all modifications when powering off the
 | 
			
		||||
current system.
 | 
			
		||||
 | 
			
		||||
The system automatically reboots when the initial shell exits. You can exit the
 | 
			
		||||
current shell by entering `exit`, which if entered from the initial shell will
 | 
			
		||||
reboot the entire system (loosing any changes if the root filesystem is not
 | 
			
		||||
permanent). Additionally, you can press Control-D ('^D') to exit the current
 | 
			
		||||
shell, but the initial shell will require you to enter a literal `exit` before
 | 
			
		||||
it exits and the system reboots.
 | 
			
		||||
 | 
			
		||||
The init process will restart the shell in the event that it crashes or dies
 | 
			
		||||
from a signal. You can use the `kill $$` command to kill the current shell, and
 | 
			
		||||
if it is the initial shell, you will get a new shell.
 | 
			
		||||
 | 
			
		||||
More Documentation
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
The system documentation (at least what has been documented so far) is installed
 | 
			
		||||
in the /share/doc directory. You can view these documents (well, the ones that
 | 
			
		||||
are plain text, there is no `man` program yet) using the `editor` program, which
 | 
			
		||||
you exit by pressing Control-Q ('^Q'). It is probably a good idea to change
 | 
			
		||||
the resolution using the `chvideomode` program if drivers are available.
 | 
			
		||||
 | 
			
		||||
If your release contains third party software, then this directory may also
 | 
			
		||||
contain documentation for this software, which may or may not be easily
 | 
			
		||||
viewable using the editor.
 | 
			
		||||
 | 
			
		||||
Filesystem Structure
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
This as an incomplete list of the common top level directories in Sortix.
 | 
			
		||||
 | 
			
		||||
* /boot - Kernel images, initrd images.
 | 
			
		||||
* /dev - Device filesystem.
 | 
			
		||||
* /etc - System-wide configuration.
 | 
			
		||||
* /home - User directories.
 | 
			
		||||
* /include - Header files.
 | 
			
		||||
* /root - Directory of the root user.
 | 
			
		||||
* /share - Architecture independent files.
 | 
			
		||||
* /share/doc - Documentation.
 | 
			
		||||
* /src - System source code.
 | 
			
		||||
* /tmp - Temporary files.
 | 
			
		||||
* /$cputype - Files for $cputype.
 | 
			
		||||
* /$cputype/bin - Programs for $cputype.
 | 
			
		||||
* /$cputype/lib - Shared libaries for $cputype.
 | 
			
		||||
 | 
			
		||||
Some of these directories not be present or empty on your installation.
 | 
			
		||||
 | 
			
		||||
Using the Shell
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Sortix features a homemade shell, which at best can be described as hacky.
 | 
			
		||||
Despite that, it does have some key features. Here are the features that are
 | 
			
		||||
supported:
 | 
			
		||||
 | 
			
		||||
* Processes can be started in the usual Unix manner.
 | 
			
		||||
* Background tasks ('&').
 | 
			
		||||
* Standard output redirection ('>').
 | 
			
		||||
* Piping stdin from a task to stdin of another ('|').
 | 
			
		||||
* Stopping the currently running task (Control-C, '^C').
 | 
			
		||||
* Waiting for a task to complete and executing the next (';').
 | 
			
		||||
* Setting environmental variables ('FOO=bar').
 | 
			
		||||
* Using $FOO to insert an environmental variable.
 | 
			
		||||
* Listing all environmental variable ('env').
 | 
			
		||||
* Setting the hostname ('HOSTNAME=sortix-pc').
 | 
			
		||||
* Changing the current directory ('cd /home').
 | 
			
		||||
* Removing an environmental variable ('unset FOO').
 | 
			
		||||
* Clearing all enviromental variables ('clearenv').
 | 
			
		||||
* Executing shell scripts ('sh script param1 param2').
 | 
			
		||||
* Escaping some special characters ('\').
 | 
			
		||||
* Comments ('#').
 | 
			
		||||
* Exiting the shell ('exit') ('exit 42').
 | 
			
		||||
* Basic wildcards ('foo*.bar').
 | 
			
		||||
* Clearing the screen (Control-L, '^L').
 | 
			
		||||
* Deleting the last typed word (Control-W, '^W').
 | 
			
		||||
 | 
			
		||||
These features are missing from the shell:
 | 
			
		||||
 | 
			
		||||
* Input redirection ('<') ('<<').
 | 
			
		||||
* Quotes (''') ('"').
 | 
			
		||||
* Proper shell wildcard support ('*/*.foo').
 | 
			
		||||
* Escaping newline characters.
 | 
			
		||||
* And much more; the shell remains hacky.
 | 
			
		||||
 | 
			
		||||
Included Programs
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
Sortix comes with a number of home-made programs. Here is an overview:
 | 
			
		||||
 | 
			
		||||
* `asteroids` - remake of the classic asteroids game
 | 
			
		||||
* `benchctxswitch` - useless benchmark
 | 
			
		||||
* `benchsyscall` - slightly less useless benchmark
 | 
			
		||||
* `calc` - reverse polish calculator
 | 
			
		||||
* `cat` - display file on terminal
 | 
			
		||||
* `chroot` - change the root directory
 | 
			
		||||
* `chvideomode` - change display resolution
 | 
			
		||||
* `clear` - clear terminal
 | 
			
		||||
* `colormake` - colorful version of make (if make is available)
 | 
			
		||||
* `column` - format lines nicely in columns
 | 
			
		||||
* `conway` - game of life simulator
 | 
			
		||||
* `cp` - copy file
 | 
			
		||||
* `date` - display current time and date
 | 
			
		||||
* `dispd` - non-existent display server
 | 
			
		||||
* `du` - report file and directory disk usage
 | 
			
		||||
* `echo` - print command line arguments
 | 
			
		||||
* `editor` - text editor
 | 
			
		||||
* `extfs` - ext2 filesystem server
 | 
			
		||||
* `find` - recursively list files
 | 
			
		||||
* `head` - display start of file
 | 
			
		||||
* `help` - show list of available programs
 | 
			
		||||
* `init` - system management deamon
 | 
			
		||||
* `initrdfs` - tool for examining initrds
 | 
			
		||||
* `install` - installs a program into a system directory
 | 
			
		||||
* `kernelinfo` - display kernel information
 | 
			
		||||
* `kill` - send signal to process
 | 
			
		||||
* `ln` - create filesystem links
 | 
			
		||||
* `ls` - list contents of directory
 | 
			
		||||
* `mbrfs` - create partitions for master boot record block device
 | 
			
		||||
* `memstat` - print memory information
 | 
			
		||||
* `mkdir` - create directory
 | 
			
		||||
* `mkinitrd` - create an initrd
 | 
			
		||||
* `mv` - move a file
 | 
			
		||||
* `mxmpp` - silly preprocessor
 | 
			
		||||
* `mxsh` - the shell
 | 
			
		||||
* `pager` - display file page by page
 | 
			
		||||
* `pong` - remake of the classic pong game
 | 
			
		||||
* `pwd` - print current directory path
 | 
			
		||||
* `rm` - remove file
 | 
			
		||||
* `rmdir` - remove empty directory
 | 
			
		||||
* `sh` - alias for the shell
 | 
			
		||||
* `snake` - remake of the classic snake game
 | 
			
		||||
* `tail` - display end of file
 | 
			
		||||
* `time` - measure program running time
 | 
			
		||||
* `type` - type raw characters directly into the terminal
 | 
			
		||||
* `uname` - system information
 | 
			
		||||
* `uptime` - time since initialization
 | 
			
		||||
* `wc` - count words and lines
 | 
			
		||||
* `which` - find path to command
 | 
			
		||||
 | 
			
		||||
Third Party Software
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
In addition, a selection of third-party software has been ported and may be
 | 
			
		||||
present on your installation. In particular, the following software packages are
 | 
			
		||||
known to work at some level of stability:
 | 
			
		||||
 | 
			
		||||
* binutils
 | 
			
		||||
* bison
 | 
			
		||||
* bochs
 | 
			
		||||
* bzip2
 | 
			
		||||
* cairo
 | 
			
		||||
* dbus
 | 
			
		||||
* diffutils
 | 
			
		||||
* fontconfig
 | 
			
		||||
* freetype
 | 
			
		||||
* gcc
 | 
			
		||||
* gettext
 | 
			
		||||
* git
 | 
			
		||||
* grep
 | 
			
		||||
* groff
 | 
			
		||||
* groff
 | 
			
		||||
* gzip
 | 
			
		||||
* hello (GNU)
 | 
			
		||||
* libassuan
 | 
			
		||||
* libatk
 | 
			
		||||
* libav
 | 
			
		||||
* libcairo
 | 
			
		||||
* libdaala
 | 
			
		||||
* libexpat
 | 
			
		||||
* libffi
 | 
			
		||||
* libgcrypt
 | 
			
		||||
* libgdk-pixbuf
 | 
			
		||||
* libglib
 | 
			
		||||
* libGL (Mesa)
 | 
			
		||||
* libGLU (Mesa)
 | 
			
		||||
* libgmp
 | 
			
		||||
* libgnutls
 | 
			
		||||
* libgpg-error
 | 
			
		||||
* libgtk
 | 
			
		||||
* libharfbuzz
 | 
			
		||||
* libiconv
 | 
			
		||||
* libjpeg
 | 
			
		||||
* libksba
 | 
			
		||||
* libmpc
 | 
			
		||||
* libmpfr
 | 
			
		||||
* libogg
 | 
			
		||||
* libpango
 | 
			
		||||
* libpng
 | 
			
		||||
* libtheora
 | 
			
		||||
* libvorbis
 | 
			
		||||
* libwayland
 | 
			
		||||
* libxkbcommon
 | 
			
		||||
* m4
 | 
			
		||||
* make
 | 
			
		||||
* nettle
 | 
			
		||||
* openssl
 | 
			
		||||
* patch (GNU)
 | 
			
		||||
* pixman
 | 
			
		||||
* python
 | 
			
		||||
* quake
 | 
			
		||||
* sdl
 | 
			
		||||
* sed (GNU)
 | 
			
		||||
* tar (GNU)
 | 
			
		||||
* xz
 | 
			
		||||
* zlib
 | 
			
		||||
* (and more)
 | 
			
		||||
 | 
			
		||||
More software will be ported in the future as the system matures. Your release
 | 
			
		||||
may not contain all the ported software because of disk space constraints or
 | 
			
		||||
the stability/usefulness of the package or the difficulty to build.
 | 
			
		||||
 | 
			
		||||
Included Games
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
The system comes with a number of small casual games. Note that some games
 | 
			
		||||
require running in the correct display mode before they will function.
 | 
			
		||||
 | 
			
		||||
### Pong ###
 | 
			
		||||
 | 
			
		||||
The program `pong` implements a simple pong clone that uses the VGA text mode
 | 
			
		||||
buffer. Player one controls using `W` and `S`, while player two controls using
 | 
			
		||||
the arrow keys. This program is only available in VGA mode.
 | 
			
		||||
 | 
			
		||||
### Snake ###
 | 
			
		||||
 | 
			
		||||
This is a simple snake clone that only works in VGA text mode. You control the
 | 
			
		||||
snake using the `W`, `S`, `A`, and `D` keys. To run, start the program `snake`.
 | 
			
		||||
This program is only available in VGA mode.
 | 
			
		||||
 | 
			
		||||
### Conway's Game of Life ###
 | 
			
		||||
 | 
			
		||||
You can do turing-complete calculations in the classic Game of Life in the VGA
 | 
			
		||||
text mode buffer. Simply start the program `conway` and use `W`, `A`, `S`, and
 | 
			
		||||
`D` to navigate the screen. `Space` toggles the current point between live and
 | 
			
		||||
dead. `C` clears the entire screen, and `R` starts and stops the simulation.
 | 
			
		||||
This program is only available in VGA mode.
 | 
			
		||||
 | 
			
		||||
### Asteroids ###
 | 
			
		||||
 | 
			
		||||
Mine for crystals in an asteroid field! Start the `asteroids` program and if you
 | 
			
		||||
have the needed driver support, you can explore space in a gloriously rendered
 | 
			
		||||
asteroid field of bitmap graphics. Use the arrow keys to navigate. Avoid the
 | 
			
		||||
white asteroids as they will destroy your space ship. Use the `space` key to
 | 
			
		||||
fire a laser beam that breaks the asteroid apart, but beware that the fragments
 | 
			
		||||
will accelerate. Alternatively, use the `Left Control` key to shoot a fireworks
 | 
			
		||||
of laser beams, but it doesn't reach as far and may split a big asteroid into
 | 
			
		||||
many small dangerous asteroids. Your goal is to collect as many blue crystals as
 | 
			
		||||
possible without dying. You can use the `B` key to spawn a bot that will
 | 
			
		||||
cluelessly follow you and shoot whatever asteroids it deems dangerous. You can
 | 
			
		||||
use the `A` key to spawn a black hole (or just a big attracting thing).
 | 
			
		||||
 | 
			
		||||
System Source Code
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
The entire system source code (except third party components) is installed into
 | 
			
		||||
the /src directory. You can use the `editor` program to view and edit the system
 | 
			
		||||
source code. If your release contains the GNU compiler collection (gcc), you can
 | 
			
		||||
even modify the system and compile custom programs.
 | 
			
		||||
 | 
			
		||||
Editing Files
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
You can use the `editor` program to edit files. The editor itself is fairly
 | 
			
		||||
simple to use. It currently supports these keyboard commands:
 | 
			
		||||
 | 
			
		||||
* `Ctrl-Q` - Exit
 | 
			
		||||
* `Ctrl-O` - Open a file
 | 
			
		||||
* `Ctrl-S` - Save a file
 | 
			
		||||
* `Ctrl-I` - Go to line
 | 
			
		||||
* `ESC tabsize <desired-tab-size>` - change tab size
 | 
			
		||||
* `ESC margin <column>` - add right margin at column
 | 
			
		||||
* `ESC popen <command>` - open command output
 | 
			
		||||
* `ESC language <c or c++>` - enable syntax highlighting
 | 
			
		||||
 | 
			
		||||
It is not currently possible to port third party editors because the terminal
 | 
			
		||||
implementation is not standards-compliant enough and is seriously lacking.
 | 
			
		||||
 | 
			
		||||
Partitions
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
If the initialization code didn't automatically create block devices for your
 | 
			
		||||
partitions, but the harddisk block device itself is supported, you can use the
 | 
			
		||||
`mbrfs` program to create block devices for the partitions.
 | 
			
		||||
 | 
			
		||||
    mbrfs /dev/ata0
 | 
			
		||||
 | 
			
		||||
The program will output the names of the new block devices.
 | 
			
		||||
 | 
			
		||||
Mounting Filesystems
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
The `extfs` filesystem server translates a block device formatted with the
 | 
			
		||||
second extended filesystem and mounts it at an empty directory. The filesystem
 | 
			
		||||
may need to be carefully configured as not all ext2 features are currently
 | 
			
		||||
supported. In particular, only the `large_file` and `filetype` features are
 | 
			
		||||
supported. There is no support for formatting or checking filesystems yet, this
 | 
			
		||||
will have to be done from an external system. You must take care to send the
 | 
			
		||||
filesystem server a SIGTERM signal to shut down when you are unfinished,
 | 
			
		||||
otherwise the data may not have been synced to disk. This will be done
 | 
			
		||||
automatically if the root filesystem was mounted by the initrd. If the device
 | 
			
		||||
/dev/ata0p1 contasins an ext2 filesystem, then it can be mounted using:
 | 
			
		||||
 | 
			
		||||
    mkdir /fs
 | 
			
		||||
    extfs /dev/ata0 /fs
 | 
			
		||||
 | 
			
		||||
You can then access the filesystem at /fs. There is no real unmount support and
 | 
			
		||||
if the file system server shuts down, the system may hang trying to communicate
 | 
			
		||||
with a server that isn't there.
 | 
			
		||||
 | 
			
		||||
Graphical User Interface
 | 
			
		||||
------------------------
 | 
			
		||||
 | 
			
		||||
The `dispd` display server is still under development. Sortix does not feature
 | 
			
		||||
any documented graphical user interface at the moment.
 | 
			
		||||
 | 
			
		||||
Network
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
Network support is still under development and is not documented at this point.
 | 
			
		||||
Unix sockets are available.
 | 
			
		||||
 | 
			
		||||
Building Sortix under Sortix
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
You can build Sortix under itself and made modifications to it. It is not yet
 | 
			
		||||
possible to build all the the third party software used to build itself, but you
 | 
			
		||||
can use the system to improve it until it is possible to build third party
 | 
			
		||||
software under it.
 | 
			
		||||
 | 
			
		||||
You need a version of Sortix that ships its own source code in /src and contains
 | 
			
		||||
a copy of the GNU Compiler Collection (gcc). Additionally, you should be booting
 | 
			
		||||
from a harddisk so that the new kernel is used after a reboot, otherwise you
 | 
			
		||||
will have to be satisfied with only using a new user-land.
 | 
			
		||||
 | 
			
		||||
You can use the `colormake` program instead of regular `make` if you want
 | 
			
		||||
colored output, which eases spotting compile warnings and errors. This program
 | 
			
		||||
simply invokes the real `make` and colors its output.
 | 
			
		||||
 | 
			
		||||
The /src/system directory contains a makefile that eases rebuilding the entire
 | 
			
		||||
system automatically. To rebuild the entire system simply run:
 | 
			
		||||
 | 
			
		||||
    cd /src/system
 | 
			
		||||
    make system
 | 
			
		||||
 | 
			
		||||
This will recompile the entire operating system and install it into the root
 | 
			
		||||
directory as it progresses. You will be running a new version of everything upon
 | 
			
		||||
completion, except the kernel and programs were previously started will still
 | 
			
		||||
be running the old version. If the root filesystem is permanent and the computer
 | 
			
		||||
has been configured to boot from it, then you can reboot the system by exiting
 | 
			
		||||
the initial shell. You will then be running an entirely new system.
 | 
			
		||||
 | 
			
		||||
In general, the projects that are part of the core system can be easily built
 | 
			
		||||
and installed with the provided makefiles. In general, they can be built with
 | 
			
		||||
this simple sequence:
 | 
			
		||||
 | 
			
		||||
    cd /src/package
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
If you wish to install the package somewhere than the default location, you can
 | 
			
		||||
use the `PREFIX` (and, depending on your needs, `EXEC_PREFIX`, `BINDIR`,
 | 
			
		||||
`LIBDIR`, ...) environmental variable to specify where the program will be
 | 
			
		||||
installed:
 | 
			
		||||
 | 
			
		||||
    make PREFIX=/local
 | 
			
		||||
    make PREFIX=/local install
 | 
			
		||||
 | 
			
		||||
Additionally, should you require that the package should be installed into a
 | 
			
		||||
temporary location before it is fully installed, use the `DESTDIR` environmental
 | 
			
		||||
variable:
 | 
			
		||||
 | 
			
		||||
    make PREFIX=/local
 | 
			
		||||
    make PREFIX=/local DESTDIR=/temporary-location
 | 
			
		||||
 | 
			
		||||
This will effectively install the package into `/temporary-location/local`, but
 | 
			
		||||
the package will expect that it is installed into `/local` when it is run. This
 | 
			
		||||
is useful for package management purposes to capture a copy of all the installed
 | 
			
		||||
files before they are installed for real.
 | 
			
		||||
 | 
			
		||||
### Building the C library ###
 | 
			
		||||
 | 
			
		||||
The C library (libc) implements the common functions, data types and constants
 | 
			
		||||
required by the C programming language standard, POSIX, other standards, and
 | 
			
		||||
various Sortix-specific extensions. Most programs for Sortix directly or
 | 
			
		||||
indirectly rely on this core library for basic functionality and system calls.
 | 
			
		||||
The build process builds a regular user-space C library as well as a
 | 
			
		||||
freestanding C library designed for inclusion into the Sortix kernel. After
 | 
			
		||||
rebuilding the C library, you may wish to rebuild the entire user-land since
 | 
			
		||||
those programs have an older libc version statically linked into them.
 | 
			
		||||
 | 
			
		||||
    cd /src/libc
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building the Math Library ###
 | 
			
		||||
 | 
			
		||||
The Math Library (libm) provides useful mathematical functions for manipulating
 | 
			
		||||
floating-point numbers of various sizes. This implements the <math.h> header as
 | 
			
		||||
known from standard C. Like the C library, you will likely want to recompile
 | 
			
		||||
large parts of user-land if you update this library.
 | 
			
		||||
 | 
			
		||||
    cd /src/libm
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building the Display Daemon ###
 | 
			
		||||
 | 
			
		||||
The dispd library allows processes to communicate with the dispd server that
 | 
			
		||||
handles window management and graphical output. Currently, there is no such
 | 
			
		||||
server and the library calls the kernel interface itself. This library allows
 | 
			
		||||
games such as asteroids and pong to detect the current resolution and request
 | 
			
		||||
whatever resolution they need to function.
 | 
			
		||||
 | 
			
		||||
    cd /src/dispd
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building the Utility Collection ###
 | 
			
		||||
 | 
			
		||||
The utility collection contains common programs such as `ls`, `cp`, `mkdir` and
 | 
			
		||||
more. These programs allow the basic operation from the command line.
 | 
			
		||||
 | 
			
		||||
    cd /src/utils
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building the Benchmarks ###
 | 
			
		||||
 | 
			
		||||
The system comes with some small and outdated benchmark programs. They don't
 | 
			
		||||
currently give any meaningful values, so you should not use them for anything.
 | 
			
		||||
 | 
			
		||||
    cd /src/bench
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building the Games ###
 | 
			
		||||
 | 
			
		||||
The games directory contains the source code for the above mentioned games.
 | 
			
		||||
These depend on libdispd.
 | 
			
		||||
 | 
			
		||||
    cd /src/games
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building mbrfs ###
 | 
			
		||||
 | 
			
		||||
The `mbrfs` program creates block devices for every partition in the master boot
 | 
			
		||||
record in a block device.
 | 
			
		||||
 | 
			
		||||
    cd /src/mbrfs
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building extfs ###
 | 
			
		||||
 | 
			
		||||
The `extfs` program translates a block device formatted with the second extended
 | 
			
		||||
filesystem and mounts it at an empty directory.
 | 
			
		||||
 | 
			
		||||
    cd /src/extfs
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building mxmpp ###
 | 
			
		||||
 | 
			
		||||
The program mxmpp is a simple and hacky macro preprocessor. It supports a special
 | 
			
		||||
@incude(foo_t.h) directive, which is used to pre-preprocess the headers in the C
 | 
			
		||||
library to avoid the overhead of repeated declarations.
 | 
			
		||||
 | 
			
		||||
    cd /src/mxmpp
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building mkinitrd ###
 | 
			
		||||
 | 
			
		||||
This program produces a Sortix compatible initrd, the file that contains the
 | 
			
		||||
initial filesystem used to bootstrap the real root filesystem.
 | 
			
		||||
 | 
			
		||||
    cd /src/mkinitrd
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
### Building the Sortix Kernel ###
 | 
			
		||||
 | 
			
		||||
The Sortix kernel is the core of the Sortix operating system. It provides all
 | 
			
		||||
the primitives libc needs to implement a Unix-like environment.
 | 
			
		||||
 | 
			
		||||
    cd /src/sortix
 | 
			
		||||
    make
 | 
			
		||||
    make install
 | 
			
		||||
 | 
			
		||||
Note that you need to reboot the system to use the new kernel and that you need
 | 
			
		||||
a permanent root filesystem or your local changes will be lost.
 | 
			
		||||
							
								
								
									
										7
									
								
								doc/welcome
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								doc/welcome
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
Welcome to Sortix!
 | 
			
		||||
 | 
			
		||||
You can view the documentation for new users in the editor by typing:
 | 
			
		||||
 | 
			
		||||
  editor /share/doc/user-guide
 | 
			
		||||
 | 
			
		||||
Press Control-Q (^Q) to quit the editor.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue