Eltanin is a project to build an operating system with focus on simplicity, reliability and security.
Glacies is an operating system composed of the Eltanin userland and the Linux® kernel.
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.
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 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 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
- Will it have POSIX compatibility
- Are you going to limit yourself to POSIX?
No, extensions and alternatives are going to be built whenever i judge necessary. The focus is not colliding against POSIX.
- Is not the focus on simplicity going to create an anemic environment?
Simplicity is different from minimalism, and minimalism is not a goal of the project (although reducing redundancy is).
- Will it be viable for people who want thigs to just work?
Yes. Automating tools are going to exist and designed to coexist with the user, so if you need or want to do something manually you should not need to fight the system.
- There is any way of testing the current work?
Yes, currently Glacies is the only option, as the kernel is in planning phase and has no public code.
- Is Glacies already usable?
No, the base system is still subject to big changes, and the number of available packages is still pretty small.