Sanos 1.3.3 review

by on

Sanos is a minimalistic 32-bit x86 OS kernel for Java based server appliances running on standard PC hardware. This enables you to

License: GPL (GNU General Public License)
File size: 386K
Developer: Michael Ringgaard
0 stars award from

Sanos is a minimalistic 32-bit x86 OS kernel for Java based server appliances running on standard PC hardware.

This enables you to run java server applications without the need to install a traditional host operating system like Windows or Linux. Only a standard Java HotSpot VM and the sanos kernel are needed.

The kernel was developed as part of an experiment on investigating the feasibility of running java server applications without a traditional operating system only using a simple kernel.

The kernel implements basic operating system services like booting, memory management, thread scheduling, local and remote file systems, TCP/IP networking and DLL loading and linking.

A win32 layer allows the Windows version of the standard HotSpot JVM to run under sanos, essentially providing a JavaOS platform for server applications. This enables you to run java based server applications, like tomcat and jboss, under sanos.

Alternatively, you can use sanos as a small kernel for embedded server applications written in C. Sanos has a fairly standard POSIX based API and an ANSI Standard C library. In this case you don't need the JVM and the win32 wrappers.

Sanos is open source under a BSD style license. Please see the COPYING file for details.

Click on the topics below for further information, or send me an e-mail if you have any questions, comments or problems regarding sanos. Please include the word 'sanos' in the mail to prevent it from being intercepted by my spam filter.

Sanos can be downloaded as either binary or source. All the files in the binary version can be built from the source version, so you do not need the binary version, if you are building sanos from source.

The binary version contains the compiled version of sanos, with files and utilities for making a boot disk.

The source version contains all the source code and build files for building sanos from source. You will need a Microsoft Visual C compiler to build sanos from source.

What's New in This Release:
GetLogicalDrives() in kernel32 implemented.
A bug in cmd_ipconfig() in sh.c prevented proper display of network configuration if no DNS servers was configured. This problem has been fixed. (FGA)
New -a option added to mkdfs to support file lists with alternative files names. This simplifies configurations with both debug and release builds.
The Visual Studio wizard can now generate a floppy disk boot image configured for the application.
Shell prompt can be configured by setting the prompt property in the [shell] section of the os.ini file.
If command line arguments are given to the shell it now executes the built-in command and exits the shell.
The floppy motor timeout routine now acquires the floppy mutex before turning off the motor in order to prevent race conditions.
Advanced Power Management (APM) support implemented. The computer can now be powered off after os shutdown. The mode parameter for exitos() can be used to specify the shutdown mode (halt, reboot, poweroff, debug). A shutdown command has been added to the shell. The power status can be retrieved using /proc/apm.
Added /proc/cpu for CPU information.
The raise() function now returns an error if the signal number is invalid.
Breakpoint traps are now sent to the user mode signal handler. This allows breakpoints to be handled by user mode code.
Signals now exits the currently executing job with the signal number as exit code. However, if the debug flag in the PEB is set the debugger is entered if an unhandled signal is encountered. The debug flag can be set using the debug command in the shell. The debug flag can be configured using the debug property in the [os] section of os.ini. The default value of the debug flag is 0, unless the system is build in debug configuration.
readv() and writev() implemented in vfs.
The kernel log is now implemented by the device driver /dev/klog. The kernel log now support ioctl for waiting for new log entries in the kernel log. The kprintf has been extended to support different log levels.
The syslog interface has been redesigned in to comply with POSIX. The syslog now supports logging to a syslog server by setting the loghost property in the [os] section of os.ini.
New klog daemon to read entries from the kernel log (/dev/klog) and add them to the system log.
The sockaddr and sockaddr_in structures has been change to conform to winsock definitions.
The sleep() function has been renamed to msleep(). A new POSIX conformant sleep function has been added to unistd.h.
Added sys/time.h header file. Also added tzp parameter to gettimeofday() for POSIX compliance.
New simple text editor utility (edit.exe) added.
The syserror() function has been moved from libc.lib to the os.dll as an exported os api call.
readline() now uses stdin and stdout for input and output.
Bug in iomux fixed. Now a monitored event signals the iomux and not the associated object.
Implemented popen() and pclose(). Also added a P_SUSPEND parameter to spawn() to allow new jobs to be started suspended.
The kernel version information is now kept in a version resource in krnl.dll. The version information is retrieved using the new module version information functions in verinfo.c.
The build type can now be controlled by compile time switches. The kernel version can be displayed in the Windows Explorer by viewing Properties for krnl.dll and selecting the Version tab.
User management added to kernel. Each thread is now assigned to a user and a group. A thread has both a real and an effective user and group owner. The {get|set}[e]{uid|gid}() functions can be used to change the effective and real user and group for a thread. When a new thread is created the effective user and group are inherited from the creator thread.
Added functions to query /etc/passwd and /etc/group files.
New whoami, id, chmod, and chown commands added to shell. The format of the output from ls has been changed to display the file permission info.
New file system version for DFS. The new version supports user and group owner for files and directories as well as permission bits. The new DFS version also supports files larger than 2GB. The fchown() and chown() functions has been added to vfs.
DES-based crypt() implementation added.
The spawn() function now computes the pgm parameter from the cmdline parameter if the pgm parameter is NULL. The initpgm and initargs properties in the [os] section of /etc/os.ini has been replaced with a single property named init. The default for init has been changed to /bin/sh.
The behavour of the initial application has been changed. Previously the os shut down after the initial application exited. Now the initial application is executed again if it exits.
Telnet daemon moved from the shell to separate server (telnetd.exe). The new telnet daemon has a more robust handling of the telnet protocol. The telnet daemon invokes the new login utlity in order to log on user.
FTP daemon implemented.

Sanos 1.3.3 keywords