wiki:PortingSoftware

Version 3 (modified by Vojtech Horky, 10 years ago) ( diff )

Few notes about porting (still WIP)

Porting Software to HelenOS

This page shall contain a brief guide for porting software (e.g. from GNU/Linux) to HelenOS. Currently, it only contains assorted links to existing resources.

POSIX emulation layer

HelenOS is not another Unix-like OS and thus it needs an emulation for applications that were written for Unix systems. This emulation is currently in HelenOS provided by libposix library that provides implementation of functions that are part of POSIX standard but were considered inappropriate for HelenOS.

libposix provides an (incomplete) illusion that the application has access to standard POSIX headers and functions. The ported application is then linked with libposix which translates the calls to HelenOS specific implementations in libc.

Implementation detail: some of the functions in libc have the same name as standard POSIX ones or they offer slightly different behaviour. To prevent naming clashes, symbols in libc.a are renamed to avoid the need to rename the POSIX versions (which was an older approach where renaming was done during preprocessing, however this approach has various disadvantages).

General approach

For most (reasonable) GNU/Linux programs, we can assume that they are distributed with a ./configure script. The purpose of this script is to check the environment and prepare Makefiles needed for actual compilation. In order to build the application for HelenOS we "only" need to persuade the configure script to cross-compile it and use HelenOS specific compiler flags and link with libposix.

Although this seems as a simple task because configure offers parameters/variables for exactly this, there are several obstacles.

  • HelenOS currently uses Linux ABI and thus the cross-compiler used gives the impression that the target is GNU/Linux system. This could lead to some false expectations.
  • There is a lot of compiler/linker flags that are passed. The amount itself obscures a reasonable editing of the command line.
  • HelenOS works mostly with static libraries. When linking with static libraries, their order is important and they typically need to come after object files for proper linking. That is not always possible to specify with plain LDFLAGS or CFLAGS settings.

The above means that either patching or some build scripts is sometimes necessary or that the invocation line for configure is rather complex (or both). To simplify the above and, foremost, to allow repeatable builds, the so called Coastline was created.

Coastline

Currently, Coastline is hosted as a separate Git repository on GitHub.

TODO:

  • principles
    • extracting the flags
    • caching built libraries
    • harbours
  • usage
  • writing harbour files
Note: See TracWiki for help on using the wiki.