Tree [4c9eea] master /

File Date Author Commit
 build 2009-07-12 Henrique Henrique [bfe9a8] Added sprintf, add_libposix_test and some comme...
 compiler 2009-08-18 Henrique Henrique [a449d9] Initial signal() and sigaction() support for linux
 mandatory 2009-10-07 Henrique Dante de Almeida Henrique Dante de Almeida [4c9eea] Removed all conversion warnings from amd64 build
 optimized 2009-05-31 Henrique Dante de Almeida Henrique Dante de Almeida [4fd458] Added empty directories.
 optional 2009-05-31 Henrique Dante de Almeida Henrique Dante de Almeida [4fd458] Added empty directories.
 runtime 2009-07-18 Henrique Henrique [65f7bc] Added buffering support to stdio. Included fflu...
 system 2009-10-07 Henrique Dante de Almeida Henrique Dante de Almeida [4c9eea] Removed all conversion warnings from amd64 build
 tests 2009-10-07 Henrique Dante de Almeida Henrique Dante de Almeida [84f672] Fixed syscall() to save and restore function re...
 CMakeLists.txt 2009-09-28 Henrique Dante de Almeida Henrique Dante de Almeida [172532] Missing files from previous commit
 COMPARE 2009-06-17 Henrique Henrique [396bf9] Fixed spell erors
 COPYING 2009-06-08 Henrique Henrique [770df8] Changed project license to 2-clause BSD license...
 INDEX 2009-07-12 John Haitas John Haitas [c2ea4b] Merge branch 'master' of ssh://jhaitas@libposix...
 INSTALL 2009-06-30 Henrique Henrique [86ed83] Fixed COMPILER_STYLE documentation
 README 2009-06-17 Henrique Henrique [74c740] Updated README with the chosen BSD license.

Read Me

May 23rd, 2009
Henrique Dante de Almeida

libposix is a bold attempt to unify the impementation of the core functionality
of all Unix systems. libposix is:
- A full implementation of the POSIX 2008 standard
- A cross platform implementation, that should replace existing implementations
of the system core libraries and unify the core Unix implementation for all
- An exact implementation of POSIX 2008 and nothing else (no extensions, no
previous POSIX versions)
- An implementation that works well with possible extensions to the core system
functionallity (ex: GNU, BSD)
- An implementation of POSIX written from scratch
- Free and open source software

What's the point of that ?
I've decided to create this project after I got upset spending one week
unsuccessfully trying to cross compile a toolchain with gcc, binutils and glibc
(the latest versions of them). I believe those tools are too clumsy, requires
tons of patches to be usable and they all should be replaced by clean, easy to
use, easy to install, easy to mantain software. There's already a nice
successful attempt to create a compiler from scratch, which is the clang
subproject of llvm. Also, binutils is the easiest project to cope with, so we
are left with the libc implementation.

How do you expect to do this ?
I need a lot of people. They should be willing to strictly adhere to the
standard and test the implementation in a lot of different systems.

What about the compatibility with Unix systems ?
Emphasis will be made to support popular free Unix implementations (GNU and BSD
based systems). The main development environment is, as of 2009, Ubuntu Linux.
In general, commercial Unix vendors should be able to easily include the
library in their systems themselves. The library:

- MUST run in GNU based systems
- MUST run in free BSD based systems
- SHOULD run in other free Unix systems
- SHOULD run in commercial Unix systems
- MAY run or be adapted to non Unix systems

First, that means the implementation license may be acceptable to all possible
systems, which leaves us few options. Probably the license will be the BSD
license [update 20090617: the two clause BSD license was chosen]. Second, all
the extensions that exist in GNU and BSD systems must coexist with libposix,
except where they could conflict with the posix implementation, but in that
case those extensions must be removed. A similar rule is applied to commercial
systems. Commercial Unix vendors should easily include their own extensions to
the core system functionallity and remove conflicting extensions. There may be
an attempt, later, to implement libraries to systems that do not claim to be
Unix compatible.

What about system requirements, development environment and all that technical
stuff ?
The library is expected to run in general purpose computers, which means that
the full standard, with all optional parts should be included. However, the
library is expected to be modular enough so that it can be built with only the
mandatory parts, so that it might be useful in embedded systems that require
POSIX conformance. Obviously, in the beginning, only the mandatory part will be

Given a cross toolchain (with exception of the library), libposix MUST be
easily compiled to any platform it supports, just like llvm is able to be
compiled with two script commands.

The library must be minimal and fast, but I don't know yet how this translates
to compatibility with old or restricted hardware.

No documentation of the system interface should be necessary. Since it will
strictly adhere to POSIX, POSIX itself is the library documentation (somebody
may still write a more didactic version of the standard, however).
Implementation details, the conformance report and installation procedure will
be documented, as usual.

The POSIX standard defines more than just the system library. For now, this
project will assume that standards compliant tools and rules already exist in
the system and are ready to use.

Being a free software project, libposix may use any free tool for the
development. However, since it's a core library, it must not depend on any
other software while in use (except the kernel or equivalent hardware/resource

The project will be written in assembly and C, so it's code doesn't strictly
adhere to any standard. However, the C part should allow a high degree of
compatibility and support standards currently in use. That means it must
strictly adhere ISO C99 (since it's a standalone library, it need not adhere to
any POSIX standard). That also means that porting libposix to a new
architecture should be a simple matter of implementing the assembly code. Note
that libposix can't adhere to ISO C90 because POSIX 2008 requires ISO C99.

How you can help ?
- Spread the word
- Understand the unification of all Unix core libraries and its implications
- Convince other system developers that this is a Good Thing
- Convince other system developers to migrate
- Code
- Test
- Document
- Read the standard
- Contact me
- Donate