summaryrefslogtreecommitdiffstats
path: root/dev.html
blob: 3ef1b3a51e70f88add04b1231e8d26ea30819240 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!--#set var="title" value="Development" -->
<!--#set var="pagetitle" value="Development" -->
<!--#include file="includes/header.html" -->
<h2>Source Repositories</h2>
<dl>
	<dt><a href="http://git.os.pehjota.net/pkg/">Packages in Git</a></dt>
	<dd>Most source packages are maintained in Git repositories.  To assist in the maintenance of a package, coordinate with its maintainer(s) and the <a href="http://www.pehjota.net/contact.html">system administrator</a>.</dd>
	<dt><a href="http://git.os.pehjota.net/notes/">Notes, specifications, and policies</a></dt>
	<dd>Specifications and policies are maintained in Git repositories.</dd>
	<dt><a href="http://git.os.pehjota.net/www/">Web site</a></dt>
	<dd>These Web pages are maintained in a Git repository.</dd>
</dl>
<h2>Specifications</h2>
<dl>
	<dt><a href="http://specs.os.pehjota.net/source-package-format-1.0.html">Source Package Format 1.0</a></dt>
	<dd>The format in which source packages are developed.</dd>
	<dt><a href="http://specs.os.pehjota.net/architecture-string.html">Architecture String Syntax</a></dt>
	<dd>The meaning of the architecture string for binary architectures and application platforms.</dd>
	<dt><a href="http://specs.os.pehjota.net/multiarch.html">Multiarch</a> (to be written)</dt>
	<dd>The ability to install and use on a system packages built for multiple architectures.</dd>
	<!--
	<dt><a href="http://specs.os.pehjota.net/service-run-control.html">Service Run Control</a> (to be written)</dt>
	<dd>A modular system for ordering the starting and stopping of system services according to inter-service dependencies.</dd>
	-->
</dl>
<h2>Policies</h2>
<p>Packages must adhere to a number of policies for distribution as part of this operating system.</p>
<dl>
	<dt><a href="http://policies.os.pehjota.net/packaging.html">Packaging Policy</a> (to be written)</dt>
	<dd>Requirements for package naming, splitting, and data.</dd>
	<dt><a href="http://policies.os.pehjota.net/filesystem.html">Filesystem Hierarchy Policy</a> (to be written)</dt>
	<dd>The structure of the files and directories in the system.</dd>
	<dt><a href="http://policies.os.pehjota.net/software.html">Software Inclusion Policy</a> (to be written)</dt>
	<dd>Legal and technical requirements to protect user freedom and to ensure that all included software can be legally distributed and effectively supported.</dd>
</dl>
<h2>Development Environment</h2>
<p>All packages are cross-built using a toolchain consisting of kernel headers, GNU Binutils, GCC, and a standard C/C++ library.  The cortexa8-linux-eglibc port, for example, is <a href="http://git.os.pehjota.net/notes/free-embedded-os.git/tree/temporary-bootstrap-builder-setup-cortexa8.txt">currently built</a> using Linux-libre 3.2.7, GMP 5.0.2, MPFR 3.1.0, MPC 0.9, Binutils 2.22, GCC 4.6.2, and EGLIBC 2.15.</p>
<p>This operating system currently supports the following programming languages: C (ISO/IEC 9899 as <a href="http://gcc.gnu.org/onlinedocs/gcc/Standards.html">implemented by GCC</a>), C++ (ISO/IEC 14882 as <a href="http://gcc.gnu.org/onlinedocs/gcc/Standards.html">implemented by GCC</a>), UNIX shell command language (POSIX.1-2008 XCU), and microprocessor assembly languages (with syntax and directives as implemented in GNU as).  Support for more languages (e.g. Perl and Python) will come as their respective interpreters and compilers are packaged; this may take time as these programs usually have many build-time and run-time dependencies and some of these programs cannot easily be cross-built.</p>
<h2>Remaining Tasks</h2>
<p>The following is an overview of development projects that need to be done before the operating system can be considered ready for production use.</p>
<h3>Boot Sequencing</h3>
<p>Currently, service init scripts are provided by the monolithic <code>initscripts</code> binary package. These init scripts are executed in the lexicographic order of the symbolic links matching <code>/etc/rc.d/S*</code> that target them.  The names of these symbolic links are currently hardcoded in <a href="http://git.os.pehjota.net/pkg/basefiles.git/tree/build?id=0ae24516#n43">the <code>build</code> makefile</a> of the <code>basefiles</code> source package.  This monolithic packaging and hardcoding of link names is a temporary and poor technical solution that doesn't scale with the number and selection of services that can be installed on a system.  Init scripts should instead be provided by the packages that provide the relevant system services.  The order in which init scripts are executed should be determined by dynamic boot sequencing based on inter-service dependency metadata.</p>
<p>This boot sequencing can be done when the system boots or after a new system service is installed.  For reference, NetBSD <a href="http://www.netbsd.org/docs/guide/en/chap-rc.html#chap-rc-rcorder">uses a program called "rcorder"</a> to determine a boot sequence at boot time.  Many GNU/Linux distributions follow (to some degree) the Linux Standard Base (LSB) specification, which defines <a href="http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html">"Comment Conventions" for dependency metadata</a> and <a href="http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/initsrcinstrm.html">a method for installing sequentially-named symbolic links</a>.  Conforming implementations perform boot sequencing at the time of service installation.  Because boot sequencing at boot time can slow down system booting, it is better to perform boot sequencing at install time.</p>
<p>Thus, generally speaking, the solution to be adopted in this system is to make packages that provide system services also include the necessary init scripts (installed in <code>/etc/init.d</code>), to include inter-service dependency metadata in init scripts, and to use a tool at the time of service package installation to generate sequentially-named symoblic links in <code>/etc/rc.d</code>.</p>
<p>An obvious boot sequencing tool is <a href="http://svn.savannah.nongnu.org/viewvc/insserv/trunk/?root=sysvinit">"insserv"</a> maintained by Werner Fink and used by Debian and openSUSE.  However, this C program (in compliance with the LSB) assumes the use of runlevels.  This operating system uses the init daemon of BusyBox, which <a href="http://git.busybox.net/busybox/tree/init/init.c?id=3da46c81#n1221">doesn't support runlevels</a>.  Therefore, we'll need to either modify insserv to work without runlevels or write our own tool for installing symbolic links to init scripts.</p>
<p>Additionally, we need to decide how completely we'll conform, if at all, with the LSB in this area.</p>
<h3>Multiarch</h3>
<h3>Installation Bootstrap Tool</h3>
<h3>Package Cross Building Tool</h3>
<h3>Multiarch Toolchain Packages</h3>
<!--#include file="includes/footer.html" -->