Fiwix logo

Welcome to The Fiwix Project

Recent News

This is another important new release towards to the definitive self hosting. The main improvement is the new support to the Minix v2 filesystem. The v1 has the limitation of 64MB size which will be used only for the /boot filesystem, since GRUB legacy doesn't support the Minix v2. The Minix v2 filesystem in Fiwix can hold up to 1GB partition. This makes possible to have a maximum of 4 partitions (/boot, /, /home and /usr), each one with 1GB of size except the already mentioned /boot.

Besides some interesting improvements and bugs fixed in the kernel, another good news is that I've successfully ported the newlib C library which has permitted to port the following (GNU) packages:

I've created a new live filesystem image of 1GB with all the ported GNU packages so far.

Unfortunately and due to some lacks in either the Fiwix kernel and the C library it won't be possible to port all GNU packages. So, in order to keep a decent UNIX-like system I use the Busybox tool to cover all missing tools.

In the next version I'll focus on create the sys_select system call which will permit to port more system tools, reduce the Busybox dependency and become a self hosted UNIX-like system.

As always, see the ChangeLog for all the details.

This is really a very important new release. It comes with a lot of new improvements, new changes and more bugs fixed. The most important is that with this release it has finished the support of the Minix v1 filesystem. This means that the kernel v0.9.0 is able to install itself on a hard disk and work on its own. Check the new 200MB hard disk image.

Another interesting feature is the buffer cache and page cache improvement which results in a dramatically faster boot on a very constrained systems (4MB of RAM, mostly). The rest of features are also of special interest since they provide a more pleasure working experience.

I've some interesting milestones for the next version which being the most important the support of the Minix v2 filesystem, fix some slowness in the hard disk drive, etc.

As always, see the ChangeLog for all the details.

This is just a maintenance release that fixes some interesting bugs but also introduces important improvements in the kernel. I'm completely focused toward the 0.9.0 version which will be indeed a significant step forward.

As always, see the ChangeLog for all the details.

With this new version the support of the Minix v1 filesystem is almost finished, the only system call pending to be implement is sys_rename. It also needs to verify the user permissions in all the filesystem system calls. After this, I'd like to begin the support of the Minix v2 filesystem and the pending system call sys_select.

This version also includes very important bug fixes, please check the ChangeLog for all the details.

This new version continues including more support to the Minix v1 filesystem with four new system calls (sys_link, sys_mknod, sys_symlink and sys_mkdir). It also includes more bug fixes and even more code cleaning and reorganizing.

For the next version I expect to finish the sys_open system call with write support, which means the ability to create and modify regular files in the filesystem. I also expect to include two new system calls: sys_creat and sys_rename. That would complete the write support of the Minix v1 filesystem and would leave the kernel ready to start supporting the Minix v2 filesystem which offers more disk capacity.

As always, see the ChangeLog for all the details.

This new version extends the support of the Minix v1 filesystem with two new system calls (sys_rmdir and sys_unlink) with write support. Since destroying is often easier than constructing, that was the reason why I chose to start first with these destructive system calls. Now I've learned enough the internals of this filesystem to be able to start with the following system calls sys_link, sys_mkdir, sys_mknod, sys_symlink and sys_rename. Leaving the creation of regular files for the last implementation.

As always, see the ChangeLog for the rest of details.

This release adds Minix v1 filesystem support as the default Fiwix kernel filesystem. The EXT2, which was the default Fiwix kernel filesystem until now, will stay as read-only and its development will be stopped. In order to accomodate the new Minix filesystem it has been necessary to reorganize several parts of the VFS code. It also has been reorganized and centralized into the config.h file all the kernel configurable options (like NR_PROCS, NR_MOUNT_POINTS, NR_OPENS, BUFFER_PERCENTAGE, etc.).

From now on, all the filesystem related system calls will be focused on the Minix v1. This version includes new filesystem calls with write support.

You will notice that there appear some messages from kernel when syncing or umounting a filesystem. These kernel debug messages will stay there just to make sure that all is working fine. They will be slowly removed as the kernel stability advances.

As always, see the ChangeLog for the rest of details.

This is a new major release that marks the end of the read-only drivers and opens the door to start the development of a full implementation of the Minix filesystem. There are numerous improvements in this new version including the new rewrite (and definitive) of the context switch mechanism, the write support in the block device drivers (RAMdisk, floppy and hard disk), and even a fix of a pair of long-standing bugs, one of them leading some memory corruption that was generating a lot of kernel panics and stability problems.

For the curious people this kernel version has 28k lines of source code (including comments and blank lines).

I'm excited to start this new 0.8 branch where I plan to include full support for the Minix filesystem and with all the system calls associated (sys_creat, sys_link, sys_chmod, sys_chown, sys_mkdir, sys_mknod, etc.). Also I'd want to focus in two important system calls: select and syslog.

As always, see the ChangeLog for the rest of details.

WARNING: from now on the Fiwix kernel is able to write on floppy and hard disks, so keep this in mind while testing it.

This release adds more improvements and bugfixes. This version has improved a lot all the memory subsystem including when the kernel is running out of memory pages. It has been also rewritten the sys_mmap and sys_munmap system calls, and also refreshed the ELF binary loading.

This should be the last version of the 0.7 branch and should mark the last version with no disk write support at all.

As always, see the ChangeLog for the rest of details.

This is another release that introduces numerous bugs fixes (some of them long standing ones) and continues with memory subsystems rewrite. The buffer cache is now much more efficient and this is indeed visible on very constrained systems like an i386 with 4MB of RAM.

There is still more work to do pending for the next release in the memory management, specially in the page cache and in the sys_mmap and sys_munmap system calls.

I continue working on kernel stability to include the Minix filesystem with write support.
As always, see the ChangeLog for the rest of details.

This new version comes with a complete rewrite of the buffer and inode cache subsystems. This has included a huge work of bugfixing in several parts of the VFS layer which affected all the current filesystems supported by the kernel (EXT2, ISO9660 and PROCFS). Some of these bugs fixed were a very long standing ones that prevented kernel from being more stable.

It has also improved the ATA and ATAPI device recognition (probably still more work is needed in the future), and now it has been added support for CF (Compact Flash) devices. Besides all this, one new system call (sys_sigpending) was introduced.

I'm focusing to minimize those annoying random crashes and have a stable enough kernel to include the new Minix filesystem with write support, which would indeed mean a big step forward.

See the ChangeLog for the rest of details.

This release comes with a complete rewrite of the keyboard driver which includes now support for the Linux binary keymaps (also compatible with Busybox). The floppy image includes a new directory /etc/i18n with a list of binary keymaps ready to be used like this:
# loadkmap < /etc/i18n/de.bmap
This new release has also improved a number of kernel procedures like sleep and wakeup functions, sys_wait4 and sys_gettimeofday system calls, and some ioctl commands related to the keyboard driver.

It also introduces 4 new system calls. See the ChangeLog for the rest of details.

I've finally finished adding support for process sessions and job control. This also includes better support and a lot of improvements in the management of the controlling terminal. Next version I'll concentrate in the keyboard mapping in order to close all the code dedicated to the terminal driver.

Besides this, it has been refactored all the code that manages the kernel drivers structure, refactored also the callout procedure, and improved RAMdisk driver. It has also been fixed a numerous bugs in different parts of the kernel, and specially in the block device functions.

As always, see the ChangeLog for the rest of details.

This release comes with a completely rewritten terminal driver that fixes a lot of pending bugs and introduces new improvements. There are still some known small bugs that will be fixed in the next version.

I'll continue working with the terminal driver introducing some needed parts like process sessions and job control. Of course and at the same time, I'll also introduce new features to the kernel in order to avoid boring with the terminal driver.

See the ChangeLog for the rest of details.

This release adds more improvements and bugfixes. There is a new implementation of process groups (leaving process sessions and jobs for 0.7.4, hopefully), new system calls, more information in procfs and some rewritten assembly core parts.

See the ChangeLog for all the bug fixing details.

This version brings new improvements towards a more stable kernel. It also includes some important bugfixes and new system call support.

Focus continues on the work in the terminal driver and to support more system calls.

See the ChangeLog for the rest of details.

A lot of improvements come with this new version. There are improvements in the signaling system, in the terminal driver and in the pipefs driver. There has been a big code restructuring and as always, a good number of bugs were fixed.

The 0.7 branch will concentrate on the terminal driver, so don't expect many improvements in other parts of the kernel.

See the ChangeLog for the rest of details.

Finally I have finished all the context switch transition from hardware to software context switch, including a complete rewrite of the system call entry and other critical sections.

Other interesting changes include the improved tty signaling, adding more termios identifiers in the ioctl() call. Also some bugs have been fixed.

I'm excited to start this new 0.7 branch where I plan to finish long standing features like process groups, job control and keyboard mapping. It will also include signal and sleep/wakeup fixing and two important new system calls: select() and syslog().

While waiting for the whole rewrite of the context switch procedure and process scheduling, this is yet another maintenance version with some bugs fixed and some improvements.

See the ChangeLog for the rest of details.

Before introduce some major modifications in the process scheduling and in the sleep and wakeup procedures, I've decided to fix a number of well known bugs and reorganize a lot of code that will make a good starting point.

The result is that 0.6.3 version, which includes a more stable ATAPI CDROM driver, and a significant reduction in the memory footprint of the process table (and more to come in the next release).

Other bug fixes affect the console driver, the RAMdisk driver, etc.

See the ChangeLog for the rest of details.

While waiting for the next 0.6.3 from which I plan to make a whole rewrite of the context switch procedure and process scheduling, I present this new release which includes two new supported system calls sys_times and sys_ustat.

It also includes a fix in the ide_busy() function and improved support in the accounting values of each process.

This version includes some basic enhancements that are necessary to improve other kernel parts in the near future. One of those enhancements is the new minimal support for the parallel port line printer driver (/dev/lp0), that will help to debug kernel messages during the adaptation of the X Window System support.

Among the new remount capability in the sys_mount() system call, this version includes a bit more of new support in the procfs filesystem with the inclusion of the /proc/cpuinfo, /proc/interrupts, /proc/meminfo and /proc/stat files. With the existence of those new files, now there are some programs that don't complain anymore and execute correctly. One of them is the top applet of the Busybox (included in the floppy image).

Finally many part of the kernel code has been improved and rewritten and some important bugs were fixed, making this version a bit more stable than its predecessor.

As always the Changelog has all the details.

A lot of work has been done since the last release and that's why this is another major version. The most important one is the completely changed kernel address space. Taking advantage of the Tim Robinson's GDT idea, I've rewritten almost all the memory code to accomodate the same memory layout as in Linux. The result is that the kernel continues being loaded at the physical address 0x100000 (1MB) but is now compiled to run at the virtual address 0xC0000000 (3GB). So, the default user space is 3GB in size leaving only 1GB for the kernel space. This means that kernel will not be able to address more than 1GB at that moment.

The next important change is the built-in support for RAMdisk devices. By default the kernel creates 1 RAMdisk (/dev/ram) of 4MB in size. This new support comes with two new kernel boot parameters ramdisk_size=nnnn and noramdisk. The first one is used to change the size of the RAMdisk, where nnnn is the size expressed in 1024-byte blocks. The second parameter is used to disable completely the RAMdisk support.

The last important change is the new support for the Rock Ridge extension in the ISO9660 filesystem. With this support the Fiwix kernel is now able to boot from an ISO9660 root filesystem, using the rootfstype kernel boot parameter. Currently it doesn't detects automatically the IDE device where the CDROM is attached, so if you plan to use the newly created Fiwix Live-CD image, you may need to change the default device (/dev/hdc) during the GRUB boot screen.

The following is a representation of all this new support:

# mount -t iso9660 /dev/hdc /mnt/cdrom
ISO 9660 Extensions: RRIP_1991A
# l /mnt/cdrom/
dr-xr-xr-x    3 root     root         6144 Dec 15  2006 bin
-r--r--r--    1 root     root         2048 Feb 18 14:40 boot.catalog
dr-xr-xr-x    3 root     root         8192 Feb 16 19:11 dev
dr-xr-xr-x    5 root     root         4096 Feb 16 19:02 etc
-r--r--r--    1 root     root      1474560 Feb 18 14:40 fiwix.img
-r--r--r--    1 root     root        88009 Oct 12  2003 install.log
dr-xr-xr-x    3 root     root         2048 Feb 28  2002 lib
dr-xr-xr-x    3 root     root         2048 Jul 10  2002 lost+found
dr-xr-xr-x    6 root     root         2048 Feb 16 19:05 mnt
dr-xr-xr-x    3 root     root         2048 Feb 16 19:04 proc
dr-xr-xr-x    4 root     root         2048 May  2  2007 root
dr-xr-xr-x    3 root     root         4096 Jul 30  2007 sbin
dr-xr-xr-x   12 root     root         2048 Jun  8  2001 usr
# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/fd0                  1440      1036       404  72% /
/dev/hdc                 52112     52112         0 100% /mnt/cdrom
As always, it has been fixed a lot of bugs and improved a lot of code, so all of this makes this version a big step forward towards to the next challenge, the EXT2 filesystem write support.

As an example of that, the following is a representation of how good looking is the ps command of Busybox:

# ps
  PID  Uid     VmSize Stat Command
    1 root        244 S   init
    2 root            SW  [kswapd]
   19 root        428 S   -sh
   20 root        260 S   init
   24 root        344 R   ps
Finally but not least, the Fiwix web site now includes RSS feeds for those that want to stay tunned on this site. This feature allows users to track new releases with their favorite RSS Reader.
This is another major version that includes another long awaited feature, the procfs filesystem. It has been created following the same directory structure as in Linux, so commands like ps and others should work finely. Althought it's far to show a complete representation of the all kernel internal data, currently is enough functional.

In order to include this new special filesystem, it has been necessary to modify a lot of internal parts specially the process table, and the floppy image has suffered some changes as well, like the new /etc/fstab file in order to be able to mount during the boot time the procfs filesystem.

The following is a representation showing the root directory of the procfs filesystem.

# ls -l
dr-xr-xr-x    2 root     root          0 May 12 12:54 1
dr-xr-xr-x    2 root     root          0 May 12 12:54 19
dr-xr-xr-x    2 root     root          0 May 12 12:54 2
dr-xr-xr-x    2 root     root          0 May 12 12:54 20
dr-xr-xr-x    2 root     root          0 May 12 12:54 23
-r--r--r--    1 root     root          0 May 12 12:54 cmdline
-r--r--r--    1 root     root          0 May 12 12:54 devices
-r--r--r--    1 root     root          0 May 12 12:54 filesystems
-r--r--r--    1 root     root          0 May 12 12:54 loadavg
-r--r--r--    1 root     root          0 May 12 12:54 mounts
dr-xr-xr-x    2 root     root          0 May 12 12:54 sys
-r--r--r--    1 root     root          0 May 12 12:54 uptime
-r--r--r--    1 root     root          0 May 12 12:54 version
In the following version its support will be extended and some bugs fixed.

Other important enhancements are the improvement of the CDROM ATAPI driver with new features, a better detection of IDE devices connected on the same controller and some bugs corrected.

In the next version I'll concentrate in the implementation of a new virtual memory manager (VMM) that should permit a better use of the internal kernel memory and the new RAMdisk device support.

The long awaited isofs (ISO9660) filesystem implementation is done. With this new major version, which includes a number of fixes and some other enhancements, anyone can start mounting CDROM using the newly created ATAPI CDROM device driver. Although its minimal support, it's completely enough.

A simple example of how to mount a CDROM:

mount -t iso9660 /dev/hdc /mnt/cdrom
In coming versions its support will be extended and some bugs fixed.

Other important enhancements include the ability to mount EXT2 filesystems with 1KB (already supported), 2KB and 4KB block sizes. There have been a lot of code lines changed in the buffer cache to accommodate this new support.

A new kernel parameter rootfstype has been created which will permit to select the root filesystem type during the boot process. This parameter was primarily created to support the CDROM boot, but it still needs a second parameter to help where to find the ATAPI CDROM device, as it can change from system to system.

This second parameter will probably be, as in Linux, an extension of the currently used rootfstype using the CDLABEL extension and giving it the CDROM volume name as the identifier.

In the next versions I'll concentrate in the procfs implementation and in all of those enhancements in the CDROM device driver.

A lot of bug fixes and some new improvements come with this new version. There has been fixed a big error during the initialization of the fractional memory pages (those that may contain DATA and BSS sections). Such error caused a lot of unexpected segmentation faults and prevented a fine working kernel. Some other bugs has been fixed in the signaling system, although more have to come to start talking about a solid signaling system.

About the improvements made in this new version, the most destacables are in the EXT2 filesystem (including a serious bug fixed in the inode location algorithm), that includes the support for EXT2 filesystems with the filetype and sparse-super features. These two features are used since some time ago in the modern EXT2 and EXT3 filesystems.

This new version includes support for the sys_reboot system call. It will permit to use command line programs like reboot, halt, etc.

Finally it has been updated the busybox that comes with the floppy image. The new version includes a set of new command line programs to enjoy with the newer kernel features.

There has been improved some diverse areas in the kernel with this new version. The most destacable is in the signaling system, where I've discovered that it really needs more work to do.

A little work has been made to fix some issues during the vconsole switching although I think it won't be totally functional until the signaling system be more solid.

Besides all of this two new system calls has been incorporated: sys_kill and sys_chroot. The current busybox that exists in the floppy image don't have the chroot applet, so I'm preparing a new version of it. Meanwhile anyone can experiment with the new system call using the /sbin/chroot binary located in the fiwix60mb.img.

I hope to have finished the signaling system in the next Fiwix version.

After a couple of months working to include full and stable support for SVGAlib based applications, now it's time to present the results. It has been rewritten a lot of virtual memory code and implemented some new VFS methods that will permit to execute any SVGAlib application like zgv.

With this new kernel anybody is able to execute practically any SVGAlib application, and the code written will serve as a base to expand the support to the X Window System.

To start playing with that new feature I have updated the LiveFilesystem to include in the same /root directory a few SVGAlib application demostrations. Not all the applications can be executed because some of them are mouse dependant and some others will fail because the lack of video acceleration in the most emulation/virtualization programs.

As an example I encourage you to execute zgv or:

and test yourself the new graphic possibilities that comes with that new kernel.

Keep in mind that in order to execute the above commands, you have to make the LiveFilesystem as the root filesystem.

The long awaited pipefs filesystem implementation is done. With this new major version, which includes a number of fixes, anyone can start using all the features of the named and unnamed pipes.

Regarding the named pipes and because the kernel don't have implemented yet the sys_write() system call, there is no way to create a FIFO file with the mknod or mkfifo commands. To solve this situation and to be able to play with the named pipes, I've created in the floppy disk a FIFO file called /dev/fifo.

A simple example of how to use a pipe in a command:

ls | grep x
A simple example of how to use a named pipe.
In one virtual console, type:
echo "hello" > /dev/fifo
and in another, type:
cat /dev/fifo
This minor bugfix release has a slightly more stable kernel. There have been some fixes and a big change in the internal VFS structure to accommodate new filesystems, especially the no-device-oriented filesystems like pipefs and procfs.

The new pipefs filesystem will permit in the next version the use of the sys_pipe() system call which indeed will permit a lot of new features.

I plan to finish the sys_pipe() system call as soon as possible and jump to the 0.3 kernel version.

This is a major bug fix release and it represents a big step towards a better kernel stability. Some of the bugs fixed were there long time ago and it has been difficult to catch them.

Another important change is that since this version it's no longer necessary to include a kernel parameter to have the English keyboard layout, because is now the new default layout. For someone who wants the Spanish/Catalan keyboard layout, it will be needed to specify the kernel parameter kbd and the corresponding localization string (es or ca). Note that this parameter has been renamed from the old lang.

Just three days after the release of the latest Fiwix version, I'm proud to show the new look of the web site.

It is mainly based on the Prex web site, another OS project, and although it has some different design I have to thanks to its author for the good job he done making a really clean look design.

Thank you Kohsuke Ohtani !.

After long time without no much movement here, the most important news in this version is the new support for the sys_mount() system call and its derivates sys_oldumount() and sys_umount(). Although its support is minimal and not all the parameters are supported yet, it's plenty functional.

Currently its limitations (among others) are that sys_mount() can only mount EXT2 filesystems type with 1KB block size. Keep in mind that because there is not mounted the /proc filesystem yet, the mount command needs the -t ext2 parameter be passed.

# mount -t ext2 /dev/hda1 /mnt/disk
Among this great news there are improvements in the floppy driver to support the most common formats, and a lots of important bugs mainly located in the VFS layer have been fixed.

In the next versions the development priority will be concentrated in the sys_pipe() system call implementation and the creation of the fully Linux compatible pipefs and procfs filesystems, which both will offer a better kernel function and the ability to support new utilities.

Finally the Virtual Filesystem (VFS) implementation has been successfully completed. After a lot of hard work, the new kernel version comes with this new disk subsystem which will make it easier to add support for new filesystems.

Another important enhancement in this version is the improvement in the Intel processors detection, and how this information is presented during the system boot up.

In the next versions the development priority will be concentrated in the sys_mount() system call implementation and the creation of a fully Linux compatible proc filesystem, which both will offer a better kernel function and the ability to support new utilities.

After a long time without having fresh news about the project, and where practically I'm doing only maintenance and bugfixing work, I'm proud to announce the start of the second development branch. It has been almost a whole year without enough time to have 100% of dedication, due to changes in the work schedule that have prevented me from dedicating the time the Fiwix project deserves.

Anyway, this second branch is born with the primary target to incorporate to the kernel the procfs filesystem support (/proc), and the VFS layer. All of this will allow the execution of basic commands as ps, free, mount, etc. and in addition, it will facilitate the future support for new filesystems.

The development of the virtual memory management advances enough good. The great news is with no doubt, that has been implemented the long awaited feature called Copy-On-Write, that allows a better perfomance during fork()s and also a better optimization of the memory resources. Because of this, during the next kernel versions and if room is available in the boot floppy, you will find a new program called forks, that will allow to evaluate the kernel speed, calculating the amount of fork()s per second. By curiosity, this weekend I have executed this binary on differents PCs and later I have done the same with diverse versions of Linux kernel.

The obtained results exposed below, will allow to have a better perspective of the Fiwix kernel.

PentiumMMX 233 Mhz PentiumIII 1133Mhz PentiumIV 2.6Ghz
Fiwix v0.1.5 1100 7100 18000
Linux v2.0.30 2500
Linux v2.4.23 22000
Linux v2.4.26 66000
fork()/second (aprox.)

Also they have been fixed (as always) some bugs, and coverall the messages WARNING: Unexpected inconsistency in hash_table. Missing page ... have been eliminated. These messages will only appear still in graphical programs like zgv or in the demo programs of the svgalib package. This is due that the direct access of the video memory pages is not managed correctly.

I'm still working in the virtual memory management and the kmalloc() and kfree() functions.

At this time the virtual memory programming has been succesfully completed (at least I hope). It have a simple mechanism because I cannot still manage a dynamic demand of memory inside the kernel (kmalloc and kfree).

I'm still working in the virtual memory management and its support functions.

See you soon!

Although this new kernel is basically another maintenance release, where were fixed several bugs afecting the kernel stability, the must important news is that has been added the newly created virtual memory management in its beta stage.

I'm still working in the virtual memory management and its support functions.

This new kernel is basically a new maintenance release.

I'm still working in the virtual memory management and the kmalloc() and kfree() functions.

After the big activity produced by the GNU/Fiwix project presentation throught the article that I submited to the technologic review OS News and the amount of emails received, the truth is that I have had a very short time to finish the things I have predicted for this month.

As promised in the article I have finished the live-filesystem which will allow a better experience with the current kernel.

I will continue improving the virtual memory management, which will be the basics to advancing with news enhancements in the kernel.

The must important news it's with no dubt that the old FILO (FIwix LOader) has been substituted by the GRUB (GRand Unified Bootloader) and it's Multiboot Specification. Currently this boot loader it's part of other projects such as RedHat Linux, FreeBSD, OpenBSD, NetBSD, GNU/Hurd, etc. and due to it's very nice features seems it can be the boot loader's standard in the future.

Taking advantage of this important change that already is featured now, I decided to take a next step in the current kernel series. From now on the development branch will be the 0.1.x and it will go up to the major version 1.0.0 in intermediate steps called minor versions like: 0.2.x, 0.3.x, etc.

The news and changelogs pages of old versions of the kernel, can be reached clicking it's corresponding links.

If somebody wants to test the kernel in a real filesystem, I recommend to install the RedHat Linux 4.2 in an old hard disk (< 2GB of space). Once installed, reboot the PC with the Fiwix boot floppy inside you will find in the downloads section.

Note that you will must indicate the correct root device in the root= argument in the grub.conf file:

# GNU/Fiwix Operating System
# Copyright (C) 1998-2003 Jordi Sanfeliu <>
# GRUB configuration file
default 0
timeout 10
splashimage (fd0)/boot/grub/fiwix.xpm.gz
title GNU/Fiwix 0.1.0
	root (fd0)
	kernel /vmfiwix root=/dev/fd0
This version is another maintenance release.

I'm still working too in the graphical support under svgalib and X11.

This version is another maintenance release. I've fixed some stability related problems. I've also improved the virtual memory address mapping and includes support for controlling terminal, process groups and sessions.

I'm still doing some kernel clean up, because there are still some stability problems.

This version is another maintenance release. I've fixed some stability related problems. I've also improved the buffer cache system mechanism, and now I start doing the firsts tests with XFree86.

I'm still doing some kernel clean up, because there are still some stability problems.

This version is another maintenance release. The new system to map virtual addresses per process already allows to execute graphical programs like zgv in console.

I continue debugging the kernel due to stability problems with buffer cache in systems with 4MB and 8MB of memory.

This version is another maintenance release. I've fixed lots of bugs and added new features to the filesystem. With symbolic links I had more troubles than I could thought in the beginning. I hope to be done with them!.

At the moment, I continue debugging kernel and programming the new virtual memory management system.

Although this is definitely another maintenance release, where I've fixed some basic bugs, the main change is the use of BusyBox in the boot floppy image.

I used to ship only bash and ls programs, due to lack of space. I still keep three programs (init, mingetty and login) which due to some kernel lacks I can't remove. I hope next release, beside have some improvements, will substitute these three programs by their BusyBox ones.

This version is just another maintenance release. I've fixed some more bugs. Those gave unexpected errors, and affected to the stability and functionality of the kernel.

From here to the last release of this series, I'll be fixing bugs and some basic lacks I've already located. I'll try to leave a kernel stable enough to start the new series (0.0.x) free of major problems and ready to grow up.

With this release the support for the Linux ELF-386 binaries is included, statically or dynamically linked. It has been a quite hard work because I have not found all the information that needed. I have had to watch part of the source code of Linux and to intuit certain aspects during the load of binaries. All this new support at the moment leans in a series of provisional internal functions. These functions are left slopes to improve when include the new virtual memory management system that I am doing.

Although the tests that I have carried out to verify this new support have been all satisfactory, has created a little instability to the kernel that it did not hope. Part of that instability is located and is created by the system call sys_getdents().

I am going to be centered in fixing these problems of instability and improving this new support. Also I will continue working in that new VMS, that will allow to take better advantage of the memory and will increase the kernel performance.

This version is also basically a maintenance release. It has already begun to reconstruct part of kernel for the support of ELF binaries dynamically linked. Because most of the libraries installed are symbolic link files, it has been necessary to add this support into the kernel to be able to continue with the working plan.

It is why today this version is released, that includes such support and a pair of bug fixes.

Aside from some essential improvements, this new version is basically a maintenance release. Its purpose is to fix a great amount of bugs and to begin to prepare kernel to include support to load ELF binaries dynamically linked, and to as well improve the virtual memory management. Due to the complexity of these two changes, the kernel stability will be initially affected, but they will allow to take advantage of the virtual memory, and the kernel in it's own will take a giant step.

Still they will be left slopes the support for the writing in filesystem and to add support for multiples filesystems by means of the VFS (Virtual File System) layer.

The improvement more remarkable than brings this new release, is without a doubt the incorporation of the new IDE driver for hard disk drives. Although so far only it supports the reading modality, I have been able to create an EXT2 filesystem and to port the most basic applications, compiled statically of course. The result has been more satisfactory of which it thought to me. The behavior of the Fiwix kernel in a real filesystem has surprised to me totally. Next I expose in detail the steps that I have followed to obtain this experimental filesystem.

First that is needed it is to have a RedHat Linux 4.2 version. This is thus because I have some problems with the new ELF binaries.

The second step and once installed the Linux system, is to create the new filesystem of a size of 100MB. Now the hard work comes there. To choose the RPM packages that do not require the network subsystem and to recompile them statically. The resulting RPM do not serve because is not possible to install RPM packages in another filesystem (at least that I know in RedHat 4.2). Therefore it will not be left more remedy than to copy one by one all the binaries already compiled and to copy them to its corresponding directory. Next I expose the whole list of packages that I have installed:

As it can be seen all the packages corresponds to the RedHat Linux 52. They are sufficiently stable packages.

Finally only rest to copy the Fiwix kernel image (vmfiwix) in the root directory of the new filesystem, reboot the computer with the floppy disk image and in the Boot Monitor (FILO) prompt indicate in the ROOTDISK the partition that has been created (in my case 'hda3'). Then only rest to type 'boot' which will load of kernel image from floppy disk and the kernel will mount filesystem indicated in the parameter ROOTDISK.

Still it is to improve the support of ANSI sequences and the system call ioctl() that is about which I think to center for the next release.

This new release brings numerous general improvements and strong internal reconstructions to be able to begin to connect driver of the hard disk The most important change note already during the initial load of the system. It is possible to be observed that this version does not incorporate the logo image of the Fiwix that normally is displayed during the load of kernel. This is thus because to be able to incorporate the program ls has had to do a little room in floppy, and the only unnecessary file was the logo image of the Fiwix. That is which when reinitiating the computer with the boot floppy, the logo image load will fail and the booting will stop in that point having given a normal message of the error of location of that image. In this point, the Boot Monitor (FILO) will hope to that the user gives to the boot command to initiate the kernel load and to continue the booting process.

The program ls will allow to test a little more the behavior of kernel, improving therefore the previous release where it was only possible to test with the built-in commands of bash.

The kernel is still unstable due to a memory problem that still I do not have solved and affects directly on a multitask environment. The solution of this problem is complicated due to the slowness of the floppy drive. this is why from this version I will be centered in the development of driver for the HDD IDE.

I believe that until the next three months I will not have the driver sufficient functional like being able to mount filesystems EXT2 in hard disks IDE, and to be able to test the driver without problems.

After almost 3 years of effort and total dedication, I can begin to present/display a semi-functional kernel. This last version allows among other functions, to create new processes (child) and to execute them. Great part of the filesystem structure and functions has improved, communication between processes by means of signals, and coverall the load in memory of the ELF-386 binaries. This has allowed to maintain a 100% binary compatibility with Linux, and simultaneously to be able to use its GNU tools.

In spite of these improvements, kernel is only able to manage one type of storage unit. The floppy. And as all we know, floppies more used at the moment has a capacity limited to 1.44MB. To this problem is necessary add the fact that the system still does not allow binaries dynamically linked, but that only recognize binaries statically linked, it means that all the binaries used tend to have a much greater size.

Anyway, and thanks to the small size of the current kernel, I have been able to create a bootable floppy image with the following programs (in execution order):

Although what I will comment next it will be explained in the GNU/Fiwix book that at the same time I am preparing, I believe that it is important to remember the steps that there are from the initial load of kernel until it appears the system prompt in the shell.

Initially kernel mounts filesystem in read only mode. Next and after preparing optimal execution environment for INIT process, it loads in memory and executes it. During the execution, INIT locates and loads in memory the file /etc/inittab where it finds all the steps to continue. One of these steps is to execute /sbin/mingetty which becomes its first son. From then INIT it only must watch the continuity of his son. In case of death of son, INIT will respawn it. On the other hand, /sbin/mingetty displays the login in the screen and invites the user to enter to the system. When the user introduces his name, /bin/login takes control of the execution asking the password.

If the password of the user match with the stored in the /etc/passwd and also fulfill a series of requirements that I will not explain not to enter details, automatically the /bin/bash is executed, where finally the user obtains the prompt and can begin to interact with the system.

Next I expose a copy of a session using the same kernel image that exists in the boot floppy in the download section:

                          Fiwix OS Release 0.0
                Copyright (C) 1998-2001, by Jordi Sanfeliu

              Kernel version 0.0.0k for Intel 32bit Platform
		      The system language is English

cpu       -               -     family=586 PentiumMMX at 167.34200 Mhz
cpuid     -               -     vendorid=GeniuineIntel model=4 stepping=3
console   0x03D4-0x03D5   -     VGA Color 80x25 (12 virtual consoles)
fd0       0x03F2-0x03F7   6     1.44MB 3'5 (New Intel 82077)

memory: total = 65536 (-384KB), kernel = 8576KB, user = 56552KB
kernel: text = 34KB, data = 12KB, bss = 187KB, i/o buffers = 6552KB
        inodes = 4071 (652KB)

mounted root (ext2 filesystem) readonly
INIT: version 2.74 booting
INIT: can't open(/etc/, O_WRONLY): No such file or directory
INIT: can't open(/etc/, O_WRONLY): No such file or directory
INIT: Entering runlevel: 3
while opening UTMP file: No such file or directory
while opening UTMP file: No such file or directory
while opening UTMP file: No such file or directory

Fiwix Operating System Release 0.0 (tty1)
Kernel release 0.0.0k

(none) login: root
Password: root

_setutent: Can't open utmp file: No such file or directory
_setutent: Can't open utmp file: No such file or directory
_setutent: Can't open utmp file: No such file or directory

bash# _
The error messages that can be observed, they are produced due to mount filesystem in read only mode, and simultaneously the lack of the write system call in the block devices.

The system still is a little unstable and can take place general hang situations of the machine. Although there is no danger to produce failures to other devices, I do not become responsibile in case that such failures took place.

Still it is left much work to do. There are many bugs that I have documented that creates an instability state. I hope to continue having time to arrive at the release 0.0.1 (just after 0.0.0z) in which will be had the function of writing in block devices and probably also it will incorporate driver for the hard disk.

The new internal kernel release is already finished. This version brings many more new developments. All the signal processing between processes has been gotten up and they have extended the number of system calls supported by the kernel. It has cost to me much more of which it thought to me to implement all the signaling system, since this supposes to touch stack switching of each process and to control its signal context, and naturally that only can become at low level by means of assembler. I hate assembler! :-). Due to all of these improvements, I have extended the u_area of each process, incorporating all the timers control (Real, Virtual and Profile). Also I have incorporated the file descriptors treatement and the processing of the regular files, the character and the block devices. All it has caused that cannot be fulfilled the espectativas to have a stable image so soon.

I believe that at the end of the next month I will be able to present/display a bootable floppy image, with a kernel sufficiently functional to being able to experiment with it.

Unlike which many have thought, the Fiwix project has not died. The delay in presenting/displaying the new version has been due to the amount of new features introduced in kernel, that have caused that every time approaches more the STABLE word.

They have spent many months from my last news in which kernel was not more than an idea. At the present time it seems that it begins to take to form and complexity simultaneously. At the moment the Boot Monitor (FILO) loads in memory automatically and executes it. Kernel takes the control from the computer, initializes all its internal structures, it detects the most elementary peripherals, and prepares a good environment for the first process (INIT). As said, because I want to maintain the compatibility with Linux, all the binaries will have to be in ELF-386 format. Provisionally, the only difference will be that they will have to be compiled statically. It simplest model of execution, allows me to accelerate its load and relocation programming.

In order to be able to test the load of binary /sbin/init, I have recompiled (statically) the same Init program that uses the Linux. At the moment kernel locates it within the filesystem, loads it and executes it. I have had to implement some system calls so that the program can continue until the point in which it hangs, because it does not find the file /etc/inittab.

I believe that at the end of this year I will be able to present/display a bootable floppy image, with a kernel sufficiently functional to being able to play with it.

The moment has arrived. From now on, all the work will be centered in the programming the kernel of the system that (initially), will have the most simplest tasks (console, keyboard, floppy and clock). On the other hand, I will be outlining all the routines of support to load it and automatically to execute it from the Boot Monitor (FILO) as it is advancing its programming.

Because I want to maintain the compatibility with Linux, kernel will be a ELF-386 format binary. This causes that its programming is delayed much more since I do not know completely how to deal with the structure of this format. Everything will become on the march.

I don't know how much time I will do need to obtain this small kernel, but as approximate time I believe that we will not see until within a few months. Anyway, I will try to reflect its advance within the ChangeLog and the Project Status sections.

From now on, the first image that will appears in the screen will be logo image specified in the directory /etc/default. Initially the name of this file will be fiwixlogo.bmp. Naturally, this file must have some requirements to be able to display it without problems:

As it can be seen, nobody logotipo of which brings the Windows serves you to have it as it bases. At the moment there will be no animation (by means of the trowel), but that will be a static image. More ahead I have the intention to equip it with certain movement that it denotes that the system is working.

Well, I finished the loading phase of the boot parameters. These parameters reside in the file located in /etc/default/boot. Next is an example of this file with the parameters at the moment supported. Naturally, future extensions are not discarted and will be detailed as they are needed.

#	@(#) boot
#	Fiwix Operating System
#	Copyright (C) 1998 Jordi Sanfeliu. All Rights Reserved.
#	default/boot - system boot parameters
#	Syntax:	PARAMETER=value  (no spaces and lowercase)
All the parameters are enough clarified by themselves. From now on I will dedicate to finish the load of the logo image.
I don't know what you think about the old web, but I believe that it needed to something a little more serious. Therefore, this will be the look that will have until we begin to see it a little old fashioned. Anyway, I like very much these new colors and this makes me suppose that they will continue during long time. Now, only it will need a little animation in some GIFs and some magical adjustments from the hand of Mr. JavaScript.
In order to be able to begin to experience a little with this boot monitor, I have put in the download section the whole image of the bootable floppy. Don't try to start up the kernel because still it does not have :-).
I have already finished the low level routines that will allow to the boot monitor to be able to read the EXT2 filesystem (Linux). This allowed to finish the ls [ directory ] command and be able to read the boot parameters located in the /etc/default/boot file. In addition, some commands have changed or added like "rootdev=", "kimage=", "logoimage=", "lang=", "set" and "boot". I do not anticipate that more are added (so far)..

As an example, next is a reproduction of a work session with the boot monitor FILO:

Fiwix OS/386 Release 0.0.0

Boot Monitor. (Press '?' for help)

[Boot]: ?

Variable         Description
rootdev=         Set the root device (fd0, hda0, etc.)
kimage=          Set the name of the kernel image
logoimage=       Set the name of the boot logo image
lang=            Set the system language (en/ct/es)

Command          Description
?                Help available
cpu              Information about CPU type and features
mem              Memory size reported by BIOS
set              Show boot parameters for the kernel
fsstat           Status of the root filesystem
ls [directory]   List the contents of a directory
boot             Load and run the kernel image specified

[Boot]: cpu

Vendor ID : GenuineIntel
CPU type  : 4 (80486 DX4)
Model     : 8
Stepping  : 3
CPUID     : yes
FPU       : yes  (contains a FPU)
VME       : yes  (Virtual Memory Extensions)
PSE       : yes  (Page Size Extensions)

[Boot]: mem

BIOS has detected 640KB of conventional RAM (below 1MB)
(using BIOS function INT 12h)

BIOS has detected 31744KB of extended RAM
(using BIOS function INT 15h, AH=88h)

Total RAM presumed = 32768KB

[Boot]: set


[Boot]: ls /

From now on I will dedicate to finish the load of boot parameters and the visualization of the logo image.
After to have been able to implant the internal structure of the boot operation, I am beginning to equip it with commands that will help to give important information about computer features. Some like "CPU", "mem", "kparams" already totally are finalized.

From now on the most important part of boot begins. That is to say, the boot floppy must have a built-in filesystem EXT2 (Linux) and the boot program must become position of the control of this filesystem. The work that I am doing now, is the programming the low level routines that will allow me to control filesystem from the boot monitor (FILO). This task is totally necessary, since by means of these boot routines will be able to locate the kernel image within own filesystem and to load it in the memory.

After spending many weeks choosing what assembler will go better to use with the GCC (32-bit ELF), and having discarded totally the option that represented the NASM, I have decided to implant the same idea that the BSD people, that is the GAS (GNU Assembler). Today I have been able to mix the assembly language with the C within the same boot program.

With the aid that has represesented the power to study the sources of the operating system FreeBSD, I have been able to make an hybrid program (Assembler + C) showing the typical phrase "Hello World" in the screen (switching from real mode to protected mode) booting from floppy. From here, I anticipate that the programming of the boot program will go faster.