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

News

15-Nov-2025

Welcome to FiwixOS 3.5

FiwixOS 3.5 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 was 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.5 will run in very old hardware.

Hardware Requirements

FiwixOS 3.5 runs only in the 32-bit i386 architecture with the following minimal requirements:
  • Standard IBM PC-AT architecture.
  • CPU: 80386 or compatible (with floating-point processor).
  • RAM: 4MiB (at least 16MiB are needed for the installation).
  • ATA Hard disk: 1GiB (minimal installation requires only ~200MiB).
  • ATAPI CD-ROM drive.

New in FiwixOS 3.5

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

  • Fiwix kernel version 1.7.0 (see detailed changes below).
  • Newlib C library version 4.5.0 with the following extra changes:
    • Added the system call sys_syslog.
    • Added the following functions:
      • posix_openpt
      • granpt
      • unlockpt
      • ptsname
      • openpty
      • getdtablesize
      • setlogmask
      • closelog
      • openlog
      • syslog
      • vsyslog
      • klogctl
      • setpgrp
    • Added the following C headers:
      • pty.h
      • sgtty.h (stub)
      • values.h
      • syslog.h
      • sys/klog.h
      • sys/ttydefaults.h
      • bits/posix_opt.h
    • Added the following constants in paths.h:
      • _PATH_DEVPTMX
      • _PATH_DEVPTS
      • _PATH_LOG
    • Increased OPEN_MAX from 64 to 256.
  • Added support for UNIX98 pseudoterminals (pty).
  • Added support for the devpts filesystem.
  • Added support for system logging.
  • Improved PCI driver and added PCI information in /proc filesystem.

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 boot from the floppy disk and then modify the kernel command-line in the GRUB menu by changing the root device to CD-ROM (e.g: root=/dev/hdc or wherever the CD-ROM drive resides), and also appending the kernel parameters rootfstype=iso9660 ramdisksize=4096.
  • The installation script install.sh accepts an argument (with the same syntax as in mke2fs) to specify the default block size in all the filesystems except /boot (e.g: ./install.sh "-b 4096").

Package Changes

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

  • at-3.2.5.
  • bc-1.08.
  • byacc-20241231.
  • coreutils-9.1 (fixed ls to show correctly the major numbers greater than 128).
  • ddrescue-1.29.
  • dialog-1.3-20250817.
  • diffstat-1.68.
  • diffutils-3.12.
  • e3-2.7.1 (fixed the path of the man pages).
  • e2fsprogs-1.40.11.
  • e2fsprogs-libs-1.40.11.
  • ed-1.22.2.
  • file-5.46.
  • gmp-6.3.0.
  • gperf-3.3.
  • grep-3.12.
  • gzip-1.14.
  • indent-2.2.13.
  • lcms2-2.17.
  • less-679.
  • libarchive-3.7.9.
  • libffi-3.5.2.
  • libiconv-1.18.
  • libpng-1.6.50.
  • libtool-2.5.4.
  • libxcrypt-4.4.38.
  • lua-5.4.8.
  • lxdoom-1.4.4 (now it searches first doom1.wad and then doom2.wad files).
  • lzip-1.25.
  • moe-1.15.
  • mpfr-4.2.2.
  • nano-8.5.
  • newlib-4.5.0-20241231.
  • newt-r0-52-24.
  • patch-2.8.
  • pciutils-3.14.0.
  • perl-5.24.4.
  • readline-8.1.2.
  • sed-4.9.
  • sysvinit-2.87dsf (fixed some issues).
  • tiff-4.6.0.
  • tree-2.2.1.
  • units-2.24.
  • util-linux-ng-2.18 (enabled dmesg, blockdev and more).
  • vttest-20241208.
  • which-2.23.

This is a list of packages new in this version:

  • ZEsarUX-13.0
    • A Zx80/Zx81/Z88, Zx Spectrum 16/48/128/+2/+2A and ZX-Uno emulator with ULAPlus support. See this video.
  • figlet-2.2.5
    • A program for making large letters out of ordinary text.
  • glheretic-1.2
    • A version of the Id Software game Heretic for SVGAlib.
  • musl-gcc-1.0.5
    • A wrapper around gcc to compile programs and libraries with musl easily. musl is a C standard library. It is lightweight, fast, simple, free, and strives to be correct in the sense of standards conformance and safety. Given that Fiwix is mostly 100% compatible with Linux 2.0 i386 ABI, binaries compiled with this version of musl should run without any problems under FiwixOS. Also, musl includes support for networking which will be helpful during the process of including networking support to the Fiwix kernel.
  • screen-4.2.1
    • A screen manager that supports multiple logins on one terminal.

This is a list of packages removed in this version:

Kernel changes

The following is a complete list of changes.

1.7.0 - 15-Nov-2025
===================
- Added support for UNIX98 pseudoterminals (pty).
- Added support for the devpts filesystem.
- Added support for system logging via sys_syslog() and /proc/kmsg.
- Added the member s_blocksize_bits in the superblock struct to use bitwise
  shift instead of division in ext2_bmap() and ext2_truncate().
- Added the RSS column in the list of processes generated by the Magic SysRq
  key 't'.
- Added the 'fd' structure as a new argument in ioctl() and select() methods.
- Added a free data pointer called 'private_data', in 'fd' structure, which is
  mostly used by the tty driver for now.
- Added support for the command TIOCINQ in tty_ioctl().
- Added the new kernel parameter 'ps2_noreset=' (which defaults to 0, disabled)
  to avoid reseting the PS/2 controller (specially useful on systems that don't
  has any PS/2 controller.
- Added support for the '/proc/pci/ and '/proc/bus/pci/devices' files.
- Added the support for the ioctls BLKSSZGET and BLKBSZGET on ATA and floppy
  drivers, and also added the missing BLKFLSBUF to the floppy driver.
- Changed modulo operations by bitwise (where possible) to reduce dependency
  from libgcc.
- Changed static array tty_table to dynamic.
- Rewritten mostly the PCI driver.
- Removed some flags from LDFLAGS in the main Makefile that prevented compile
  the kernel with newer GCC versions. [#97]
- Removed the dir_write method from the ext2 and minix filesystems.
- Removed a condition in do_sched() because it has no effect.
- Removed an unneeded assignment to need_resched in do_exit() and reduced the
  abuse of using need_resched because it costs excessive context switches.
- Renamed the functions *_dir_readdir() and *_dir_readdir64() to *_readdir()
  and *_readdir64().
- Renamed all *fd_table function arguments to avoid shadowing the global
  fd_table array.
- Simplified a do.while() in reclaim_siblings() also with small improvements in
  reclaim_buffers().
- Reverted 49393d0 and fixed 'memksize' in all cases to be able to boot again on
  systems with 4MiB of memory.
- Reverted 39c0097 because an existing bug prevents a complete installation on
  systems with less than 64MiB of memory.
- Update LICENSE file with additional contributor information.
- Fixed ext2_balloc() and ext2_ialloc() to return -ENOSPC when there is not
  space on device.
- Fixed fs.h to include fd.h when CONFIG_NET is not set.
- Fixed some kernel crashes with the message 'WARNING: page_head returned NULL!
  (free_pages = 0)' when using a RAMdisk drive as the root filesystem. [#98]
- Fixed ext2_file_write() to avoid to brelse() a NULL buffer. [#98]
- Fixed sys_open() to catch early an attempt to write on a directory.
- Fixed to add some missing iput() in procfs_lookup() and procfs_followlink().
- Fixed sys_mount() to also save the mount point for nodev filesystems.
- Fixed an unintended fall-through in set_color() of fbcon.c.
- Fixed a long standing bug in send_sig() that missed to add SIGCONT, SIGWINCH
  and SIGUSR to the list of signals to ignore when the disposition is set to
  SIG_DFL.
- Fixed an always true comparison in get_procfs_by_inode().
- Fixed a long standing bug in sys_kill() that prevented from sending the signal
  zero.
- Fixed a long standing bug in sys_select() that returned always -EBADF when
  'nfds' is equal to FD_SETSIZE.
- Fixed a long standing bug in tty_read() that always returned VMIN bytes
  regardless of the amount of data available.
- Fixed a possible null pointer dereference in proc_list().
- Fixed a long standing bug in sys_select() that didn't return -EINTR if it was
  interrupted by a signal.
- Fixed sys_fork() to share the remaining CPU time of the parent with the new
  child.
- Fixed to avoid a division by zero in SLEEP_HASH() macro when NR_PROCS is less
  than 10.
- Fixed a long standing bug in data_proc_pid_cmdline() and
  data_proc_pid_environ() functions that led to the kernel panic.
- Fixed an accidental fall through in opost().
- Fixed a missing iput() when freeing or merging a vma region.
- Fixed get_free_buffer() to not create new buffers if free memory pages are
  lower than minimal.
- Fixed inefficient code by reducing excessive calls to wakeup(&buffer_wait) in
  fs/buffer.c.
- Fixed a bug in sys_open() that allowed to create a file on a read-only
  filesystem.
- Small fixes, code cleanup and cosmetic changes.

Known Issues

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

  • There is an known bug that prevents FiwixOS from installing on systems with 64MiB or less of memory when the config option INODE_PERCENTAGE is less than 5. So in order to continue be able to install on these constrained memory system, I'll keep such option to 5 while I try to discover the cause.
  • There are other bugs here and there. Some of them are hurtless, others are annoying but only a few of them can sometimes panic the kernel.
  • Regarding the filesystem, file corruption cases are really low but not 100% free. I recommend to make periodic filesystem checks with fsck.ext2 and backups, to make sure you can recover from a serious situation.

Definitely this code needs more eyeballs to help to catch all these bugs.


First   Previous