Fork me on GitHub
Fiwix symbol
Welcome to the Fiwix project
Your small UNIX-like kernel



Welcome to FiwixOS 3.2

FiwixOS 3.2 is a completely free, open source, UNIX-like hobby operating system based on the Fiwix kernel. This is a true self-hosting operating system, which means that all packages supplied (including the kernel) have been compiled natively and no other operating system has been used in the process.

All binaries are linked statically and are built to use pure 80386 code. This is intended to make sure that FiwixOS 3.2 will run in very old hardware.

Hardware Requirements

FiwixOS 3.2 runs only in the 32-bit i386 architecture with the following minimal requirements:
  • Standard IBM PC-AT architecture.
  • CPU: i386 (with floating-point processor).
  • RAM: 3MB (recommended 128MB).
  • ATA Hard disk: 1GB (recommended 2GB).
  • ATAPI CD-ROM drive.

New in FiwixOS 3.2

This section provides an overview of the major highlights in this release.

  • Fiwix kernel version 1.4.0 (see detailed changes below).
  • Added support for the PCI local bus.
  • Added support for QEMU PCI serial devices (without MMIO).
  • Added support for the UNIX System V IPC mechanisms:
    • semaphores.
    • message queues.
    • shared memory.
  • Ported the Python language version 3.6.15.
  • Introducing opkg as the system package manager.
  • Newlib 4.2 ANSI C library with extra functions.
  • Two new system devices: /dev/full and /dev/port.
  • Debug symbols have been stripped down, reducing considerably the size of ELF binaries.
  • Improvements in the system building process.
  • Improvements and bug fixes in the system environment.

Installation-Related Notes

This section outlines those issues that are related to the installation procedure.

  • The floppy disk cannot start the installation procedure; only the CD-ROM is able to. Still, if you have an old PC that is unable to boot from CD-ROM, you can boot from the floppy disk and use the CD-ROM as the root filesystem to proceed with the installation. To do so, you need to modify the kernel command-line in the GRUB menu by changing (root=) to use the CD-ROM device (e.g: root=/dev/hdc or wherever the CD-ROM drive resides), and appending the kernel parameters rootfstype=iso9660 ramdisksize=4096.

Package Changes

This is a list of packages that have been upgraded since the previous release:

  • autoconf-2.69
  • automake-1.15.1
  • byacc-20220128
  • coreutils-8.32
  • dialog-1.3-20220526
  • diffutils-3.5
  • dos2unix-7.4.3
  • e2fsprogs-1.18
  • ed-1.18
  • expat-2.4.8
  • global-6.6.8
  • grep-3.6
  • gsl-2.7.1
  • gzip-1.12
  • indent-2.2.12
  • jpeg-9e
  • lcms2-2.13.1
  • less-590
  • libiconv-1.17
  • libtool-2.4.7
  • libxcrypt-4.4.28
  • logrotate-3.20.1
  • lua-5.4.4
  • lzip-1.23
  • m4-1.4.18
  • make-4.2.1
  • mpfr-3.1.4
  • nano-3.2
  • nasm-2.15.05
  • newlib-4.2.0
  • pkg-config-0.25
  • readline-7.0
  • sed-4.4
  • tar-1.34
  • tiff-4.4.0
  • vttest-20220215

This is a list of packages new in this version:

  • Python-3.6.15 (without threads and statically linked)
  • libarchive-3.6.1
  • libffi-3.4.2
  • libxml2-2.9.14
  • libxslt-1.1.34
  • opkg-0.6.0
  • pciutils-3.8.0
  • sharutils-4.15.2
  • xml2-0.5
  • xmlto-0.0.28

Kernel changes

The following is a complete list of changes.

1.4.0 - 15-Nov-2022
- Added support for the PCI local bus.
- Added support for the UNIX System V IPC mechanisms (semaphores, message queues
  and shared memory).
- Added the character device /dev/full.
- Added the character device /dev/port.
- Added the system call sys_getcwd. [#4]
- Added the configuration option CONFIG_QEMU_DEBUGCON to include support for the
  QEMU Bochs-style debug console.
- Improved the serial driver to support QEMU PCI serial devices.
- Removed the extra lock when dispatching the bottom halves.
- Mask the interrupt during the execution of the interrupt handler.
- Reorganized the code to separate interrupt related functions from specific pic
- Moved set_leds() into the bottom half of the keyboard interrupt.
- Moved the start and stop tty functions into the bottom half of the keyboard
- Removed the command to detect the interface type of the keyboard.
- Removed the kernel parameter 'noramdisk', so from now on the RAM disk driver
  is disabled by default. Use the kernel parameter ramdisksize= to configure
  and enable it.
- Reversed the check order of schedule and signals before leaving the kernel
- Improved the cooperation with reclaim_buffers() when kernel runs out of memory
- Added the functions inport_l() and outport_l() in core386.S.
- Added the sleeping address value in the SysRq process listing.
- Added the configuration option CONFIG_SYSCALL_6TH_ARG (disabled by default),
  to enable the 6th argument in the system calls.
- Added the configuration option CONFIG_LAZY_USER_ADDR_CHECK to relax the number
  of checks in the linear address of a system call parameter.
- Reorganized the signal functions to avoid that signals sent by the kernel have
  to use the same checking mechanism as if they were sent by a user process.
  This also fixes a permission problem when sending the SIGCHLD signal to a
  parent process owned by a different user, during the context of sys_exit().
- IDE driver now shows the PIO mode instead of UDMA mode, since the later is not
  supported yet.
- IDE driver now will use the current logical values if they are valid in the
  identify field.
- Changed the bios memory map functions to show that the ending address is
  inside each range.
- Changed sys_execve() to use the first argument instead of argv[0].
- Reverted 75bb49d and 4ecf9dd, as the PC emulator '' (maybe others)
  requires to select the drive on every command.
- Fixed the slowness during the system boot-up caused by the keyboard driver not
  using interrupts during its own initialization.
- Fixed ext2_truncate() to return the error code after calling free_dblock().
- Fixed v1_minix_truncate() and v2_minix_truncate() to return the error code
  after calling free_zone().
- Fixed ext2_truncate() to correctly free doubly-indirect blocks.
- Fixed v1_minix_truncate() and v2_minix_truncate() to correctly free
  doubly-indirect blocks.
- Fixed ext2_truncate() to free triply-indirect blocks.
- Fixed v2_minix_truncate() to free triply-indirect blocks.
- Fixed the way how the I/O permission bitmap in TSS is implemented.
- Fixed the implementation of the sys_ioperm() system call.
- Fixed the execution permission logic that let root user execute any file.
- Fixed to handle SysRq key inside keyboard interrupt instead of in its bottom
- Fixed a missing inode release in elf_load() when argument list exceeds ARG_MAX
  on an ELF binary that requires an interpreter.
- Fixed a possible NULL pointer dereference with elf32_ph in elf_load() and
- Fixed the type of the user file descriptor (to unsigned int) in a number of
  system calls.
- Fixed a possible index out of bounds in bios_map_add().
- Fixed a missing validation in the arguments of sys_execve().
- Fixed an inefficiency in the mechanism of ext2_dir_readdir() and
- Fixed the function get_last_boot_addr() to return a proper address even when
  there are no ELF header tables. This mostly happens when the kernel is loaded
  using the QEMU argument -kernel.
- Fixed a possible out of bounds access in CHECK_UFD() macro.
- Fixed a possible out of bounds in utsname structures.
- Fixed UTS_MACHINE to return always 'i386' in all processor types on the i386
- Fixed do_printk() to show correctly the value of the second identifier when
  there are two consecutive identifiers
- Fixed to show the size of an ATA drive in KB if it's less than 1MB.
- Fixed to use the standard algorithm to convert LBA to CHS in the ATA driver.
- Fixed the TCSETSW, TCSETSF, TCSETAW and TCSETAF ioctl functions, so now they
  wait output buffer to drain before apply the new settings.
- Fixed a missing update of the termios structure during the ioctl functions:
- Fixed sys_open() to check directory permissions only if the file does not
  exist and O_CREAT has been specified.
- Fixed callouts bottom half to avoid nesting.
- Fixed a bug introduced in 8eaed51 that prevented initrd images from
  working. [#7]
- Small fixes and cosmetic changes.
- Cleaned up a lot of code.

Known Issues

This is a list of known issues pending to be resolved:

  • Sometimes the system looks unresponsive specially when dealing with multiple processes. In the majority of cases the system can be resumed by simply login from a new console or terminal. It seems that there is a problem waking up processes at some point. In other cases, less frequent, the system is not so easy to recover unless you hit CTRL-ALT-DEL which will cause a reboot. This is caused by a race condition when locking an inode or buffer. Finally, there are very remote serious cases where system totally freezes.
  • Regarding the filesystem, file corruption cases are really low but not 100% free. I recommend to make periodic filesystem backups to make sure you can recover from a serious situation.

    Definitely this kernel needs more eye balls to help to catch all these bugs.

  • If you need to rebuild a big-sized application you'll probably have to increase the value of VMA_REGIONS in include/fiwix/config.h (and rebuild the kernel) in order to avoid running out of mmap regions. This will no longer be necessary when the kernel have a better memory management.

First   Previous   Next   Last