Fiwix logo

Welcome to The Fiwix Project

Recent Changes

0.8.5 - 25-Jan-2017
- Rewritten some parts of the elf_load() function to be able to support up to
  ARG_MAX (by default 128KB) argument size.
- Added more protection to control the strings passed in all system calls.
- Improved the INIT process start up.
- Fixed a small bug in [minix]_dir_readdir() function.
- Fixed a bad offset counting in [ext2]_dir_readdir() function.
- Fixed in printk() function to be able to print the '%' character.
- Fixed a bug introduced in the last version while fixing the infinite loops
  when there are no more memory pages.
- Fixed the prologue and epilogue in some assembler functions.
- Fixed a lot of long standing problems in the namei() function which also
  forced to rewrite code in most filesystem related calls.
- Fixed a missing iput() of the INIT binary inode before calling sys_execve()
  during the init process.
- Fixed a long-standing bug that corrupted the buffer cache when the old buffer
  was not removed (under certain circumstances) from its hash queue.
- Small fixes and cosmetic changes.

0.8.4 - 02-Sep-2016
- Added to invalidate inodes on every sys_umount() which fixed some bugs.
- Fixed all [fs]_bmap() functions to return correctly the error code.
- Fixed to assign 'sb->dev' to 'i->rdev' during the ialloc() function.
- Fixed mktime() to return correctly the current date and time.
- Fixed 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).
- Fixed a long standing bug in [fs]_dir_readdir() functions.
- Fixed infinite loops when there are no more memory pages in kernel-mode.
- Fixed a race condition in pipefs_write().
- Fixed an uninitialized block in minix_mkdir().
- Fixed to not grow the directory size when reusing directory entries.
- Fixed 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.3 - 25-Jun-2016
- Added to include the new inode into hash in ialloc().
- Fixed sys_umount() to sync all inodes before umounting the device.
- Fixed to correctly write all the dirty inodes in sync_inodes().
- Fixed to correctly write all the dirty buffers in sync_buffers().
- Fixed in iput() to remove inode from hash if 'i_nlink == 0'.
- Fixed inode counter usage in do_namei().
- Fixed some bugs in do_namei() and get_basename().
- Fixed user_syscall() assigning correctly the values to each register.
- Fixed some strange behavior when compiled with -O0 flag.
- Fixed 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.2 - 25-Mar-2016
- 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.
- Fixed the sys_fchown() system call number.
- Fixed some signess comparison issues.
- Fixed the inode counter in iget().
- Fixed to initialize the superblock pointer in the inode structure in iget().
- Fixed sys_write() system call to prevent negative values in count
- Fixed to prevent mounting a filesystem on top of another one.
- Fixed VFS methods for symbolic links in the procfs.
- Fixed 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.1 - 23-Jan-2016
- 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.
- Fixed the spurious interrupts treatment.
- Fixed sleep() to honour uninterruptible processes.
- Fixed to force using get_device() in some parts of the kernel.
- Fixed execution permissions in sys_execve().
- Fixed 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.0 - 21-Nov-2015
- 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.
- Fixed a panic in do_page_fault() caused by using the V2P macro directly on a
  kmalloc() when running out of memory.
- Fixed to prevent writing on a block device beyond its size.
- Fixed a long standing bug which caused collisions in the callout table and
  some processes were never waked up.
- Fixed a race condition when using two floppy drives simultaneously.
- Fixed to check if kmalloc() returns NULL during ELF load interpreter.
- Fixed a bad calculation of free buffers in '/proc/meminfo' which confused the
  'free' command.
- Fixed a long standing memory corruption bug in proc_listdir() and
  proc_listfd() of the proc filesystem.
- Fixed the ide_delay() function which prevented detection of some IDE drives.
- Fixed the outport_sw() function.
- Fixed keyboard issues on certain old motherboards with Vortex86 processor.
- Fixed the inode count in some places.
- Small fixes and cosmetic changes.
- New system calls:
	sys_ftime, sys_sync

0.7.9 - 13-Sep-2015
- Improved the mechanism when kernel runs out of memory pages.
- Improved the ELF loader and fixed numerous bugs.
- Added support for ioctl TIOCLINUX function 12 (get console type).
- Removed a dollar prefix from '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().
- Fixed the expand_heap() function to be much more efficient.
- Fixed a bad type definition that generated a value overflow in the
  release_binary_pages() function.
- Fixed a lot of bugs when kernel runs out of memory.
- Fixed sys_nanosleep() system call to not block if timeout is zero.
- Fixed to not count the cpu quantum in the idle process.
- Fixed to do nothing in the default case for the SIGCHLD signal.
- Fixed the sys_pause system call to not return on ignored signals.
- Fixed to discard any pending stop signal (SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU)
  if SIGCONT signal is generated, and vice versa.
- Fixed a bad minor number generation in /dev/hd[a,b,c,d] devices.
- Fixed a kernel panic due to an offset-related bug in /dev/ram.
- Fixed a long standing memory corruption bug in printk() and sprintk() with
  strings longer than 1024 bytes.
- Fixed some bugs in sys_brk() system call.
- Fixed to not free reserved memory pages.
- Small fixes and cosmetic changes.

0.7.8 - 06-Apr-2015
- Improved the efficiency of the buffer cache.
- Kernel now uses the user stack to manage all signal handlers mechanism.
- Enhanced the system reset procedure with the the Fast Hot Reset mechanism.
- Removed an extra array of direct blocks in the inode table, hence reducing
  its size and increasing the number of inodes in memory.
- Improved the detection of 'fast' and 'slow' symbolic links in EXT2 filesystem.
- Fixed some bugs in the memory initialization process.
- Fixed to remove the string '' on recognized Intel processors.
- Fixed a bug in CPU detection function which generated bad timings on IRQ0
  under VMware Player during the first 20 seconds.
- Fixed the size of argv0 in process table to NAME_MAX.
- Fixed a double buffer remove from free list in getblk().
- Fixed a long standing bug when counting the size of the page_table.
- Fixed to possible race conditions when getting a buffer.
- Fixed to initialize readers and writers offsets when opening a fifo file.
- Fixed to save correctly the command line parameters.
- Fixed a comparison statement in do-printk() to correctly print ''.
- Fixed a long standing memory corruption bug in pipe/fifo mechanism.
- Fixed the return value in kill_pgrp(), it was ESRCH all the time.
- Fixed the wakeup_proc() function to not panic on stopped processes.
- Fixed some missing brelse() calls in elf.c.
- More fixes in the stop_kernel() function to avoid infinite respawing loop.
- Small fixes.

0.7.7 - 09-Jan-2015
- Rewritten completely the buffer and inode cache subsystems.
- Improvements in the stop_kernel() function.
- Improved ATA and ATAPI device recognition.
- Added support for CF (Compact Flash) devices.
- Improved the stack information on a kernel panic.
- Some cosmetic changes.
- More code cleaning.
- Fixed the first operand constraint in user_syscall().
- Fixed a bug in sys_umount() that prevented umounting nodev filesystems.
- Fixed some long standing bugs in the inode counter of all filesystems.
- Fixed a bug when parsing the command line parameters.
- Fixed the location of the kernel stack during the boot up.
- Fixed to not reset pgid and sid values when resetting a tty from an escape
- Fixed some bugs in ATAPI/CDROM drive.
- Fixed a long standing bug in mmap.c that missed counting the inode used.
- New system calls:

0.7.6 - 26-May-2014
- Added support for user space keymaps and dead keys.
- Rewritten the keyboard driver.
- Improved the ioctl commands related to the keyboard driver.
- Improved sys_gettimeofday() system call.
- Reimplemented sleep/wakeup procedures.
- Fixed sys_wait4() system call to return correctly process resource usage
- Fixed a bug in cmos_read_date() that prevented getting correctly the values.
- Fixed to show correctly more values in '/proc//stat' file.
- Fixed the sys_times() system call.
- Fixed a inode problem in the /proc/sys directory.
- New system calls:
	sys_stime, sys_settimeofday, sys_getrusage, sys_getrlimit

0.7.5 - 06-Jan-2014
- Added job control support.
- Added true process sessions support.
- Improved a lot the controlling terminal management.
- Refactored the callout procedure.
- Refactored the code to handle all drivers structure.
- Improved the RAMdisk driver.
- Some cosmetic changes.
- Fixed a number of small bugs in the terminal driver.
- Fixed to process input queue (read_q) after respond with an escape sequence.
- Fixed the VSTOP and VSTART special characters. Now they work again.
- Fixed to limit the number of cblocks in use per tty queue.
- Fixed the keyboard IRQ handler placing all the hard work in its bottom half.
- Fixed Alt+key escape sequence handling.
- Fixed sys_nanosleep() system call.
- Fixed a number of bugs in generic read/write block device functions.
- Fixed more bugs in block device minor handling.
- New system calls:
	sys_setitimer, sys_getitimer

0.7.4 - 26-Oct-2013
- Reimplemented completely the terminal driver which includes a lot of
  improvements and bug fixes.
- Added the new kernel parameter "console=" to define the system console. The
  default value is /dev/tty0.
- Added 'cwd', 'exe' and 'root' entries in the PID directory of the procfs.
- Added 'rtc' information file in the procfs and improved a lot the CMOS code.
- Reestructured a lot of code in the procfs.
- Added synchronization mechanism in global file descriptor table handling.
- Added screen blanking after 10min of idle.
- Fixed a bug in tty_open() that prevented login correctly using mingetty in
  the first tty.
- Fixed the terminal handling of /dev/console, /dev/tty0 and /dev/tty.
- Fixed a long standing bug when moving all the children to INIT process when
  the parent exists.
- Fixed some bugs in the handling of controlling tty.
- Fixed to send SIGCHLD to INIT process if one of its new children is a zombie.
- Fixed a memory override in printk() function.
- Fixed some VT100 escape sequences.
- Massive code refactoring.

0.7.3 - 20-Apr-2013
- Implemented true support of process groups.
- Added more information in '/proc//status'.
- Removed the initialization of x and y on terminal reset (by close()).
- Relocated the init_init() and init_trampoline() to a new file.
- Rewritten init_trampoline() to inline assembler.
- Added the 'self' symlink in procfs.
- Fixed signal context implementation in order to support nested sighandlers.
- Fixed a long standing bug in wakeup_proc() that generated a kernel PANIC when
  trying to wake up a running process.
- Fixed the values kstkesp and kstkeip in /proc//stat.
- Fixed in printk() to show correctly unsigned numbers with %u.
- Fixed some small typos.
- Fixed to better initialize unused proc_table entries.
- Fixed the PANIC function avoiding a kernel freeze in order to be able to
  scroll up the screen and see all the messages.
- Fixed value alignment in '/proc/meminfo'.
- Fixed the boot time value shown in '/proc/stat'.
- Fixed to be null-terminated the string 'nullstr'.
- New system calls:
	sys_setreuid, sys_setregid, sys_setpgid
	sys_setfsuid (unsupported), sys_setfsgid (unsupported)

0.7.2 - 04-Feb-2013
- Added the /proc/dma file in the procfs.
- Reduced the number of possible infinite loops.
- Relocated the floppy transfer memory area of DMA.
- Optimized code in the exceptions and irq entry functions.
- Optimized all the DMA code.
- Added information on support of 'cpuid' and 'fpu' in '/proc/cpuinfo'.
- Fixed a possible NULL comparison in get_filesystem().
- Fixed to avoid calling IDE identify on reset error. This speed up boot process
  in very slow computers.
- Fixed to set the bit-02 (EM) in the CR0 register in order to catch FPU
  instructions and prevent a processor hang in old Intel 80386 SX/DX.
- Fixed the code to show the processor's brand string.
- New system calls:

0.7.1 - 03-Nov-2012
- Improved signal handling.
- A lot of improvements in the terminal driver.
- Some improvements in the linker script.
- Improved the pipefs driver.
- More code cleaning.
- Restructured a lot of code.
- Reduced the bss by allocating some big structures during the kernel start up.
- Fixed some bugs in the ATAPI CDROM driver.
- Fixed a bug in unregister_irq().
- Fixed a bug when checking if schedule is needed that prevented waking up
  processes correctly.
- Fixed a lot of memory corruption bugs in the pipefs driver.
- Fixed a bug using p->argv and p->envp on a killed (still zombie) process.
- New system calls:
	sys_sgetmask (obsolete), sys_ssetmask (obsolete),

0.7.0 - 11-Dec-2011
- Completely rewritten all the process context switch code.
- Lot of code cleaning.
- Added string padding in sprintk() and fixed a bug.
- Improved tty signaling adding more termios identifiers in the ioctl() call.
- Fixed a bug in the command line parsing function.
- Fixed a missing tty dissasociation when a process exits.
- New system calls:

0.6.4 - 24-Sep-2011
- Improved the console driver with new features.
- Added the /proc/partitions file in the procfs.
- Optimized the code of the system call entry.
- Some cosmetic changes.
- Fixed another bug in the /proc/PID/cmdline and /proc/PID/environ files.
- Fixed in namei.c to check if filename is longer that EXT2_NAME_LEN;
- Fixed some bugs in the console driver.
- Fixed to 3 digit size the major number in the /proc/devices file.
- Fixed a bug when calculating the next available PID.
- Fixed a bug in procfs that prevented showing correctly the PID numbers (10,
  100, 1000, etc.)

0.6.3 - 16-Apr-2010
- Optimized the segment descriptors code and reduced a lot of redundant
  assembler code in the GDT and IDT initialization.
- Optimized the function to calculate de processor clock speed.
- Isolated a lot of i386 machine dependant code and other cosmetic changes.
- Improved the IDE/ATAPI device detection and fixed a good number of bugs.
- Improved the initial environment of the INIT process.
- Reduced the memory footprint of the process table.
- Fixed some termios bugs in the console driver that affected the behaviour of
  the BS and DEL keys.
- Fixed an out of bounds subscript in the command line arguments array.
- Fixed a missing creation of the minors list of the IDE ATAPI CDROM that
  prevented working CDROM devices in some cases.
- Fixed to disable the RAMdisk driver when there isn't enough free memory.
- Fixed a kernel page fault when showing the contents of /proc/PID/cmdline and

0.6.2 - 30-Nov-2009
- Added the accounting values when a process is in user or in kernel mode in
  the file /proc/stat file.
- Added support for the accounting values of the time spent by children in
  user and kernel modes. Those values were needed to implement the sys_times()
  system call.
- Fixed in ide_busy() to include the check for the DRQ status.
- New system calls:
	sys_times, sys_ustat,

0.6.1 - 24-Apr-2009
- Rewritten some string related functions and renamed their include files.
- Cleared all the code in the string.h functions.
- Compacted the code of the processor exception handling.
- Optimized and cleared a great part of the IDE code.
- Added the /proc/cpuinfo file in the procfs.
- Added the /proc/interrupts file in the procfs.
- Added the /proc/meminfo file in the procfs.
- Added the /proc/stat file in the procfs.
- Added the 'remount' capability for the sys_mount() system call.
- Added the parallel port line printer driver (/dev/lp0) supporting only one
- Fixed correctly the limits of the segment descriptor for user processes.
- Fixed the mechanism to detect better the page faults generated by the stack.
- Fixed some stack problems in the assembler functions for the CPU detection.
- Fixed a bug in the buffer allocation of fifo files.
- Fixed a bug during the clone of the process address space that permitted
  copying the pages mapped to the video addresses.
- Fixed a bad declaration in the Rock Ridge structure that prevented working

0.6.0 - 11-Mar-2009
- Kernel is now compiled to run at virtual address 0xC0000000 (3GB), it
  continues being loaded at physical address 0x100000 (1MB) though.
- Changed completely the initial layout of the kernel data structures.
- Rewritten mostly of the entry assembler code using the Tim Robinson's GDT
  idea to reflect the new kernel location.
- Rewritten partly the memory init process to reflect the new kernel location.
- Rewritten the internal mechanisms that create the process address space.
- Changed a static array allocations by dynamic ones in ext2_bmap() which fixes
  some kernel PANICs due to stack problems.
- Fixed the pointers of argv and envp in the process table.
- Fixed the preference of the operator % during the buffer and inode hashes
  calculation that caused a lot of unstability.
- Removed ghost processes appeared in the /proc directory listing.
- Added support for RAMdisk devices. By default the kernel has defined only
  one RAMdisk (/dev/ram0).
- Added the new kernel parameter "ramdisk_size" to define the RAMdisk size in
- Added the new kernel parameter "noramdisk" to disable RAMdisk devices.
- Fixed to show correctly the inode device number in the /proc/PID/maps file.
- Fixed to show '/dev/root' in the root filesystem device in /proc/mounts.
- Fixed a bad checking for null pointer references which helped to discover some
  important bugs.
- Fixed the ioctl() call in the CDROM drives.
- Fixed to prevent a crash during a sys_mount() if filesystem type is NULL.
- Used the build timestamp as the UTS_VERSION value.
- Added support for the sys_statfs() in the ISO9660 filesystem.
- Added support for the Rock Ridge extension in the ISO9660 filesystem.
- Fixed a missing inode release when umounting devices.

0.5.0 - 12-May-2008
- Added the very long awaited procfs filesystem. It still lacks a lot of system
  files but all its internal structure and functionality is finished.
- Improved with new features the ATAPI CDROM driver (closing automatically
  the tray, preventing media removal when it's mounted, etc.).
- Fixed some bugs in the ATAPI CDROM driver.
- Fixed some problems during the detection of IDE devices.
- Rewritten partialy the VFS corresponding to the IDE devices, in order to
  support different IDE devices (hard disk and cdrom drives) in the same
- Fixed a bug in read_inode() that prevented to discard correctly an inode under
  i/o error situations.
- Fixed to close() the device if sys_mount() is not completed.
- Changed the kernel location from / to /boot.
- Shifted down GNU/Fiwix logo in the GRUB splash image.

0.4.0 - 28-Nov-2007
- The buffer hash and inode hash tables that were initially sized inside the
  kernel BSS, are now sized during the system startup.
- Fixed the "%c" handling in the printk() function.
- Fixed a bug in the strncmp() function.
- Fixed the handling of the permission flags for each header section during the
  loading of an ELF binary.
- Improved the way how are created the vma entries during the binary loading.
- Added provisionally the read-only flag during the root filesystem mount.
- Added support for filesystems with different block size (1KB, 2KB and 4KB).
- Rewritten a lot of buffer cache code to accomodate the new support for 1KB,
  2KB and 4KB block size filesystems.
- Rewritten a lot of EXT2 filesystem code to take care to use the block size
  value included in the in-memory superblock table instead the old one fixed
  to 1KB.
- Added support to read different block sizes in the floppy and hard disk
  drivers, taking care to use the block size value included in the request
- Improved the IDE devices information. Now detects the UDMA mode but is not
  used yet.
- Added the kernel boot parameter 'rootfstype' to specify which filesystem
  will be used in the boot device.
- Added the IDE ATAPI CDROM driver with minimal support and improved a little
  bit all the IDE drivers related code.
- Added minimal support (without extensions) for ISO9660 filesystem.
- Fixed the treatment of the return value when read_inode() returns NULL.
- Fixed a bad use of the MIN() function.
- Fixed a bug in the check_fs_busy() function during the sys_umount() system
- Removed an old dependency of the EXT2 filesystem during the ELF loading. Now
  it uses bmap() and it's more generic.

0.3.3 - 30-Jul-2007
- Fixed a big error in the ELF-i386 binaries during the initialization of the
  fractional pages between the data and bss sections. Such error caused a lot
  of unexpected segmentation faults.
- Improved the way how are created and handled the addresses in the process
  virtual memory maps.
- Improved all the kernel command line parameter handling.
- Fixed a lot of bugs in the signaling system and optimitzed its code. More are
  still needed.
- Added support for the filetype feature in the ext2 filesystems.
- Added support for the sparse-super feature in the ext2 filesystems when in
  read-only mode (since the lack of sys_write() implementation, all mounts are
  still automatically mounted as read-only mode).
- Fixed some errors in the inode location algorithms in the EXT2 filesystem.
- Fixed an IDE ioctl() command that prevented getting correct hard disk size
- New system calls:

0.3.2 - 20-May-2007
- Optimized the VMM code introduced in the previous version.
- Minimal improvements in the vconsole switching when at least one of them is
  in graphics mode.
- Added new ioctl commands for a better vconsoles handling.
- Fixed IDE hard disk device minor numbers detection and isolation.
- Fixed to read unregistered block devices with same device major number.
- Fixed sending a SIGSEGV to the process when the kernel is unable to find the
  interpreter of an ELF binary during the sys_execve().
- Some fixes in signaling system. More are still really needed.
- New system calls:
	sys_kill, sys_chroot

0.3.1 - 02-May-2007
- Adapted the printk() function to support the va_list types and its standard
  macros in order to prepare it to be a complement for the new added sprintk().
- Improved the handling of the sys_getdents() system call to be part of the
  current VFS layer.
- Added the readdir() method into the VFS structure.
- Improved virtual memory manager code to support SVGAlib based applications
  and to add the possibility to mmap() physical addresses.
- Improved the way how to map physical addresses in the /dev/mem driver.
- Added the mmap() and readpage() methods into the VFS structure.
- Fixed code to be built with gcc 4.x.

0.3.0 - 19-Jan-2007
- Added the long awaited pipefs filesystem which will permit the use of named
  and unnamed pipes. Regarding the named pipes and because the kernel dont have
  implemented yet the sys_write() system call, there is no way to create fifo
  files with the mknod/mkfifo commands. To solve this situation and to be able
  to play with named pipes, I've created in the floppy disk a fifo file located
  in /dev/fifo.
- Fixed to get a blank inode when getting a new inode in the iget() function.
- Fixed the blk_dev_lseek and blk_dev_ioctl methods to take care if they are
  (still) not implemented in its corresponding block device driver.
- Added the file descriptor as a new argument for the close() method in the VFS.
- Fixed and rewritten completely the way how are processed the arguments during
  the sys_execve() system call.
- Fixed the ext2_dir_lseek() method with the sys_lseek() system call.
- Fixed to connect to INIT all the children processes when its parent dies.
- Removed some unused variables and code cleaning.
- It compiles with no errors with gcc-3.4.
- New system calls:

0.2.4 - 05-Jan-2007
- Added support for processor's cache detection. Now is displayed during the
  kernel boot in the same line where is showed the processor speed.
- Fixed a bug during the page table initialization.
- Fixed an overflow during the size calculation of the buffer and inode tables
  on systems with more than 400MB of memory.
- Added a verification in buffer_read() before jumping to fsop->read().
- Fixed some bad decisions during a page-fault procedure.
- Unified the way how is called the sys_iopl() with the rest of system calls.
- Restructured more accurately all the VFS implementation in order to fit the
  new pipefs. This filesystem is special in what not has any device associated
  to it (nodev mode).

0.2.3 - 02-Oct-2006
- Fixed an inode lock during the interpreter load in dynamically linked ELF
- Fixed a bug when handling the stack page faults that caused a lot of
  unexpected kernel panics. That was the big one!.
- Rewritten some parts of VFS layer to better support multiple filesystems.
- Fixed an unreleased inode when its type is not supported yet (fifo & socket).
- Fixed an unreleased buffer when detecting an empty/broken symbolic link.
- Fixed PANIC function to take care to not burn the CPU anymore.
- Fixed in elf_load() to only release the old binary inode when it really
  exists. This will prevent to release an unexistant inode when loading the
- Removed a duplicated iput() in namei().
- Fixed a global malfunction in the inode hash table mechanism.
- Changed to English the default keyboard language layout.
- Changed from "lang" to "kbd" the name of the kernel parameter to specify the
  keyboard layout (current values are: "en", "es" and "ca").

0.2.2 - 08-Sep-2006
- Incremented to 5 the number of supported system call parameters.
- Fixed floppy driver to add real support for 360KB, 1.2MB, 720KB and 2.88MB
  type drives.
- Fixed to support I/O operations directly to block devices.
- Fixed some missing releasing inodes in many system calls.
- Fixed unexpected inode locking caused by an incorrect use of iput() and
  inode_unlock() in different places.
- Some arrays initialy declared with fixed size, are now changed to dynamic
- Added a memory clobber for the sti/cli calls.
- Fixed a memory leak in sys_getdents().
- The kernel now is able to mount/umount filesystems (ext2 only).
- New system calls:
	sys_mount, sys_oldumount, sys_umount

0.2.1 - 01-Nov-2005
- VFS layer included (only ext2 filesystem supported right now :).
- Completely rewritten almost all filesystem internal structure.
- Improved the way is mounted the root filesystem.
- Removed some unused code and code cleaning.
- Ported the load average calculation formula from the Linux kernel.
- Fixed the correct CPU Intel architecture number (i386, i486, i586 or i686)
  for sys_uname().
- Improved CPU identification routines.
- New system calls:

0.2.0 - 23-Apr-2005
- Improved some console/tty handling in canonical mode.
- Fixed initialization bug in Write-Protection (WP) bit of cr0 register.
- Fixed lot of bugs in Copy-On-Write routines. Although one still persist.
- Changed completely the internal mechanism to connect device files (block and
  char) with their respective drivers. Some bugs fixed.
- Improved mount_root() in super.c. Now uses iget() correctly.
- It compiles with no errors with gcc-3.3.

0.1.5 - 01-May-2004
- Fixed bug in search_page_hash() which created " WARNING: Unexpected
  inconsistency in hash_table. Missing page ..." messages.
- Better handling of page faults in the stack area.
- Implemented the long awaited Copy-On-Write (CoW) feature. As a result,
  fork()s are now faster than ever and resources better managed.  Completely
  rewritten the page-demand mechanism in the virtual memory management.
- Other cosmetic fixes (removed unused variables and code cleaning).

0.1.4 - 15-Mar-2004
- Added the new kernel parameter "lang=" to set the keyboard language layout.
  At this time only "es" and "en" are valid values. The default is "es".
- Fixed some memory leaks during page deallocation.
- Completely rewritten the hash mechanism of page-table and lot of related bugs
- Fixed bug during page table initialization.

0.1.3 - 01-Feb-2004
- Fixed several bugs when handling with buffers on symlink_readlink() and
- Fixed bug in free_pages counter.
- Completely rewritten the buffer-cache and inode-cache mechanisms.
- First testings with the newly created virtual memory management.

0.1.2 - 01-Dec-2003
- Completely rewritten the gdt, ldt, tss and idt initialization. Now it's
  possible to specify a number maximum of processes (NR_PROCS).
- Fixed a double (two) exception during a new page allocation when its page
  table is not present (one for the page-table and another for its own page).
  Now all the new page allocations are made with only one exception. Which is
- Fixed bug in console driver to avoid writtings on unopened consoles.
- Improved sleep/wakeup states in tty driver.
- Added the VT_OPENQRY and VT_ACTIVATE ioctl features.
- Code cleanup.

0.1.1 - 01-Nov-2003
- Changed completely the way which memory is calculated. Now it takes advantage
  of the memory map provided by GRUB (BIOS 0xE80, where available) and optimize
- Fixed a lot of stability problems.
- Fixed a bug in console initialization.

0.1.0 - 01-Sep-2003
- Added support for the GRUB Multiboot Specification.
- Changed the old FILO boot loader by GRUB, which have better support for
  modern hardware and have a lot of new features.
- Added a floppy controller reset during floppy_init().
- Fixed child page-tables initialization during fork().
- Updated code to detect newer Intel processors using CPUID extensions (where
- Report more and better information during boot process.

0.0.0w - 01-Jun-2003
- Added more features to ioctl() system call for ttys.
- Improved terminal handling in graphics mode using svgalib.
- Fixed a big bug during page table allocation and initialization in some parts
  of kernel.
- New system calls:

0.0.0v - 01-Apr-2003
- Removed the already-registered-device control, which avoided to mount as a
  root device the rest of disk drives that was not primary master.
- The *stat() system calls now returns PAGE_SIZE (4096 bytes) as a "st_blksize"
  value. Before, it returned 1024 bytes which affected the sys_getdents()
- Fixed lot of bugs in old_mmap() and sys_munmap() and its related functions.
- Added support for the controlling terminal (ctty), process groups, sessions,
- New system calls:
	sys_sethostname, sys_setdomainname, sys_getpgid, sys_getsid

0.0.0u - 01-Jan-2003
- Fixed some bugs in the buffer cache which affected hash functions.
- Reduced signal latency between processes. Sometimes it caused uncontrolled
  reentries in the kernel.
- Exception and interruptions entry calls improved.
- Implemented inode_lock() and inode_unlock() for the internal inode system
- Inodes freeing routine iput() improved.
- Improvements in the TAB handling mechanism of the console driver.
- Fixed a critical bug in the read function in file.c, which caused to don't
  read, sometimes, the last block of a file.
- It compiles with no errors with gcc-2.96.

0.0.0t - 01-Sep-2002
- Improvements on error detection of the buffer cache.
- old_mmap() and sys_munmap() system calls totally rewritten.
- Improved the internal structure of the virtual addresses map for each process.
- Improvements while loading in memory ELF binaries.
- Implemented new semaphores during the access to process table.
- Improvements on detecting page_faults caused by process stack.
- Boot option LANG removed. It was going to allow kernel messages in many
- FILO improvements in memory detection on old 80386 and 80486 processors.

0.0.0s - 03-Jul-2002
- Fixed a bug in floppy driver during the check results after reading.
- Improvements on the floppy driver when moving transfer area to kernel memory
  space. 20KB being freed to user space.
- Rewritten namei() and it's helping routines.
- Improved symbolic links handling mechanism.
- Improvements on the internal registry of the device drivers.
- New system calls:

0.0.0r - 01-May-2002
- Improvements on the floppy driver. Resource locking implemented.
- Fixed some bugs in do_munmap().
- Fixed a bug in namei.c which affected directly to symbolic links with an
  absolute path.

0.0.0q - 01-Apr-2002
- Fixed some bugs in FILO.
- Improvements on the floppy driver.
- System call sys_getdents() totally rewritten.
- Fixed a bug in namei.c. bmap() was not used correctly and caused to not
  localize files in directories bigger than 12 direct blocks (EXT2).
- Fixed a bug in mmap.c. It didn't controlled correctly the
  null-pointer-references in the user space.
- Fixed some bugs about inodes and buffer's space. get_free_inode() and
  get_free_buffer() called a sleep() with the parameter PROC_INTERRUMPIBLE.
  Currently the only parameter implemented is PROC_UNINTERRUMPIBLE.

0.0.0p - 03-Mar-2002
- ELF binaries dynamically linked loading fully restructured.
- It works with no problems under Bochs v1.3. Although it's too slow, due to an
  excess of internal structures to initialize.
- Fixed some bugs during process synchronization.
- Reestructured again the stack layout in memory of the ELF binaries, to be the
  same as in Linux.
- Minimum support for Linux's dynamically linked ELF binaries.
- New system calls:
	old_mmap, sys_munmap, sys_mprotect

0.0.0o - 01-Jan-2002
- Fixed a bug in elf.c. It didn't free a buffer at the end of ELF binaries
- Fixed a bug in FILO which caused the kernel don't mount filesystems in other
  devices than primary master. The value of ROOTDRIVE didn't match with the
- Added symbolic links support.
- New system calls:
	sys_sigsuspend, sys_readlink

0.0.0n - 01-Dec-2001
- Console driver improvements to interpret ANSI escape sequences.
- Enhanced detection of the new Intel processors.
- It compiles with no errors with egcs-2.91.66.
- Improvements in the detection and treatment of signals for memory protection
- Reestructured the stack layout in memory of the ELF binaries, to be the same
  as in Linux.
- Totally improved the runtime environment of /sbin/init.
- Fixed a bug in inode.c (during the change from "indirect block" to
  "double-indirect block").
- FILO: Added ROOTDRIVE option, which will allow to specify the "root
  filesystem" to mount when the kernel is loaded.
- Fixed a bug in file.c which caused overwrittings in the user's memory space.
- Fixed some bugs in BSS section during demand paging.
- New system calls:
	sys_statfs, sys_fstatfs, sys_nanosleep, sys_umask, sys_uname,
	sys_waitpid, sys_olduname, sys_iopl
- Improved system calls:
	sys_ioctl, sys_wait4

0.0.0m - 01-Jul-2001
- New driver for IDE/ATA hard disks, it also detects ATAPI CDROM devices. This
  new driver is working in read-only mode for the moment.
- Improvements on timers. They work similarly to signals, so it allows to have
  a maximum of 31 working simultanously.
- Fixed bug in printk() function.
- Added the driver for memory devices (/dev/mem, /dev/kmem, /dev/null and
- Big improvements to the console driver to interpret ANSI escape sequences.
- FILO (FIwix LOader) has now more dependence with the kernel.
- New system calls:

0.0.0l - 01-May-2001
- Created the file 'Changes' which will contain all the changes between kernel
- Bug fixed in the free pages count during the memory initialization process.
- Bug fixed in a pointer into each process' internal structure, which basically
  affected to sys_execve() system call, but it also caused some unexpected
  General Protection Faults (GPFs).
- Fixed a calc error which causes an overflow over 1024 in the pages table.
- Big improvements in the console and keyboard driver.
- New feature CLOSE_ON_EXEC added for the file descriptor of a process.
- Algorithm modified for the system calls sleep(), wakeup() and wake_proc().
  This is now much more effective although it's still provisional.
- New system calls:
- Improved system calls:
	sys_fcntl, sys_ioctl