News
15-Nov-2022
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 parametersrootfstype=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 functions. - 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 interrupt. - 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 space. - Improved the cooperation with reclaim_buffers() when kernel runs out of memory pages. - 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 'copy.sh/v86' (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 half. - 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 elf_load_interpreter(). - 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 minix_dir_readdir(). - 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 architecture. - 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: TCSETA, TCSETAW and TCSETAF - 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
ininclude/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.