Fiwix 0.8.5

Fiwix is an operating system kernel written from scratch, based on the UNIX architecture and fully focused on being POSIX compatible. It is designed and developed mainly as a hobby OS and, since it serves also for educational purposes, the kernel code is kept as simple as possible for the benefit of readers or students. It runs on the 32-bit x86 hardware platform and is compatible with a good base of existing GNU applications.

Tags operating-system kernel posix unix
License Other
State development

Recent Releases

0.8.526 Jan 2017 15:25 minor bugfix: Rewritten some parts of the elf_load() function to be able to support up to ARG_MAX argument size. Added more protection to control the strings passed in all system calls. Improved the INIT process start up. a small in minix _dir_readdir() function. a bad offset counting in ext2 _dir_readdir() function. in printk() function to be able to print the ' ' character. a introduced in the last version while ing the infinite loops. When there are no more memory pages. The prologue and epilogue in some assembler functions. a lot of long standing problems in the namei() function which also. Forced to rewrite code in most filesystem related calls. a missing iput() of the INIT binary inode before calling sys_execve(). During the init process. a long-standing that corrupted the buffer cache when the old buffer. Was not removed (under certain circumstances) from its hash queue. Small and cosmetic changes.
0.8.403 Sep 2016 21:05 minor bugfix: Added to invalidate inodes on every sys_umount() which some. All fs _bmap() functions to return correctly the error code. to assign 'sb- dev' to 'i- rdev' during the ialloc() function. Mktime() to return correctly the current date and time. The value of st_blocks in sys_newstat(), sys_newlstat() and. Sys_newfstat() in filesystem that do not store the total blocks used by an inode (e.g. Minix). a long standing in fs _dir_readdir() functions. Infinite loops when there are no more memory pages in kernel-mode. a race condition in pipefs_write(). an uninitialized block in minix_mkdir(). to not grow the directory size when reusing directory entries. a buffer corruption during reclaim_buffers(). New system calls: Sys_creat (write support) Sys_open (write support) Sys_write (write support) Sys_truncate(write support) Sys_ftruncate(write support)
0.8.326 Jun 2016 12:45 minor bugfix: Added to include the new inode into hash in ialloc(). Sys_umount() to sync all inodes before umounting the device. to correctly write all the dirty inodes in sync_inodes(). to correctly write all the dirty buffers in sync_buffers(). in iput() to remove inode from hash if 'i_nlink == 0'. Inode counter usage in do_namei(). Some in do_namei() and get_basename(). User_syscall() assigning correctly the values to each register. Some strange behavior when compiled with -O0 flag. The file_read() function in all filesystems in order to support holes. More code cleaning. New system calls: Sys_link (write support) Sys_mknod (write support) Sys_symlink (write support) Sys_mkdir (write support)
0.8.226 Mar 2016 03:15 minor bugfix: Removed inline assembly code in the context switch mechanism. Added the ifree() method in pipefs. Reorganized more parts of the VFS code. Added a schedule check during the tty_write() loop. Included an extra argument in the bread() function. the sys_fchown() system call number. some signess comparison. the inode counter in iget(). to initialize the superblock pointer in the inode structure in iget(). sys_write() system call to prevent negative values in count. to prevent mounting a filesystem on top of another one. VFS methods for symbolic links in the procfs. a bad behavior in do_sched() caused by its call from tty_write(). More code cleaning. New system calls: sys_rmdir (write support) sys_unlink (write support).
0.8.124 Jan 2016 08:05 minor bugfix: Added support for the Minix v1 filesystem. Reorganized several parts of the filesystems code. Reorganized all kernel configurable options. Improved sys_mount() and sys_umount() system calls. The spurious interrupts treatment. Sleep() to honour uninterruptible processes. to force using get_device() in some parts of the kernel. Execution permissions in sys_execve(). a race condition in the buffer cache. More code cleaning. New system calls: Sys_chmod (write support) Sys_fchmod (write support) Sys_chown (write support) Sys_fchown (write support) Sys_utime (write support)
0.8.022 Nov 2015 15:45 major bugfix: Improved the context switch mechanism and GDT initialization. Added block level write support and buffer synchronization. Added write support to RAMDisk driver. Added write support to floppy driver. Added write support to hard disk driver. Improved floppy, hard disk and CDROM drivers. Improved the del_callout() function to compare also the argument value. a panic in do_page_fault() caused by using the V2P macro directly on a kmalloc() when running out of memory. to prevent writing on a block device beyond its size. a long standing which caused collisions in the callout table and some processes were never waked up. a race condition when using two floppy drives simultaneously. to check if kmalloc() returns NULL during ELF load interpreter. a bad calculation of free buffers in '/proc/meminfo' which confused the. 'free' command. a long standing memory corruption in proc_listdir() and proc_listfd() of the proc filesystem. the ide_delay() function which prevented detection of some IDE drives. the outport_sw() function. keyboard on certain old motherboards with Vortex86 processor. the inode count in some places. Small and cosmetic changes. New system calls: sys_ftime, sys_sync.
0.7.914 Sep 2015 03:15 minor bugfix: Improved the mechanism when kernel runs out of memory pages. Improved the ELF loader and numerous. Added support for ioctl TIOCLINUX function 12 (get console type). Removed a dollar prefrom 'need_resched' operand, treating it now as a. Direct-address operand instead of an immediate operand which caused to Continue rescheduling all the time. More improvements in the kernel panic procedure. Added numeric only left-justification capabilities to printk(). Improved and partially rewritten the system calls sys_mmap() and sys_munmap(). The expand_heap() function to be much more efficient. a bad type definition that generated a value overflow in the. Release_binary_pages() function. a lot of when kernel runs out of memory. Sys_nanosleep() system call to not block if timeout is zero. to not count the cpu quantum in the idle process. to do nothing in the default case for the SIGCHLD signal. The sys_pause system call to not return on ignored signals. to discard any pending stop signal (SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU) if SIGCONT signal is generated, and vice versa. a bad minor number generation in /dev/hd a,b,c,d devices. a kernel panic due to an offset-related in /dev/ram. a long standing memory corruption in printk() and sprintk() with. Strings longer than 1024 bytes. Some in sys_brk() system call. to not free reserved memory pages. Small and cosmetic changes.
0.7.806 Apr 2015 09:16 major bugfix: 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.