Eltanin Overview

Eltanin is a project to build an operating system with focus on simplicity, reliability and security.

Glacies

Glacies is an operating system composed of the Eltanin userland and the Linux® kernel.

Core

The core utilities are those defined by the standard POSIX and expected to exist in any unix-like system. The implementation is written to keep things simple, small and fast, also strictly POSIX compatible.

Ports

The ports is a build-system that acts as a source-based package manager, able to install, and create, packages. It coexists with venus, both being independent of each other.

A ports entry looks like this:

[vars]
name=package_name
version=package_version
license=package_license
description=package_description
cksum= # file whirlpool sum
src=   # folder name after unarchived (defaults to $name-$version)

# list of patches (one per line)
[patches]
package_name-fix_something.patch

# list of urls to fetch the package (one per line)
# protocol url (http(s) can supress the protocol)
[mirrors]
https://url/file/package.tar.gz
http://url/file/package.tar.gz

# dependencies needed in real time
[rdeps]
coreutils

# dependencies needed during link time
[mdeps]
libc

[build]
# set the build method
# see mk/meth for supported methods
portsys_mk_meth autohell
# pass flags
portsys_mk_setflags --enable-feature
# start build process
portsys_mk_exec

[install]
# start install process
portsys_mk_exec install

Tertium

Tertium is a general purpose library aiming to make easier to build reliable and secure software. It has no dependencies, and internally replaces the standard library C.

A few comparisons:

/* mem routines comparison */
/* libc */
memcpy(buf, buf + 10, sizeof(buf) - 10); /* may pass unnoticed (should be memmove) */
memset(buf, 0, sizeof(buf)); /* insecure for cleaning sensitive data */
memcmp(buf, password, sizeof(password)); /* insecure for sensitive data */

/* tertium */
c_mem_cpy(buf, size(buf) - 10, buf + 10) /* works with memory overlap */
c_mem_set(buf, sizeof(buf), 0); /* secure */
c_mem_equal(password, sizeof(password), buf); /* secure */

/* malloc routines comparison */
/* libc */
malloc(x * sizeof(*ptr)); /* may overflow silently */
free(ptr), free(ptr); /* UB (double free);  */
realloc((void *)-1, 200); /* UB (non owned region) */

/* tertium */
c_std_malloc(x, sizeof(*ptr)) /* catches overflow */
c_std_free(ptr); c_std_free(ptr); /* ignores the second free silently */
c_std_realloc((void *)-1, 200, sizeof(uchar)); /* fails and sets errno */

Venus

Venus is a simple binary package manager that uses the filesystem as a database.

The database entries are plain text files, and are similar to this:

# name: mksh
# version: R57
# license: MirOS
# description: An enhanced version of the public domain ksh.
# size: 1722324
makedeps:
    libc-dev#1.0
files:
    bin/mksh 26563540613 722630
    bin/lksh 26670173552 612610
    share/man/man1/lksh.1.zz 3411105021 7720
    share/man/man1/mksh.1.zz 26621401501 154744

FAQ