Changelog
Overview: This maintenance version polishes the 0.8 release with bug fixes, enhanced hardware support, mouse scroll-wheel integration, better EXT4 filesystem handling, and improved reliability and performance.
Added mouse scroll-wheel support to the USB mouse driver (it was already in the PS2 driver), and updated various parts of the GUI to respond to scrolling.
The USB 3 XHCI driver now supports 64-bit contexts.
Added CPU detection of x86_64 processors
Added support for deep EXT4 extent inodes.
For improved performance, mouse pointer drawing has been returned to the mouse interface’s interrupt handling context.
Added some new recognized device classes and subclasses to the PCI driver.
Disk performance statistics in the Program Manager now calculate throughput per second/millisecond, instead of system timer ticks.
When the user clicks on a window that has an active dialog window, the GUI will now raise or focus the parent window as well, instead of only focusing the dialog, so that the parent window becomes visible over some other window that might have had the focus.
Improved the appearance of GUI menu bars and menus when using small fonts, such as the built-in font of the ‘basic’ mode installation. Tweaked the layout of menu bars and menu items, and reduced the default minimum window size to 4×4 (just borders).
Modified the framebuffer graphics driver’s rectangle drawing function driverDrawRect() so that it doesn’t need to allocate and free memory.
Enhanced the kernelLinkedList code so that when iterating through the list, it will check whether the current item has been removed (iteration is performed without a lock on the list). If so, it will restart from the beginning.
For improved reliability, the GUI’s window list has been converted to a kernelLinkedList.
Added a GUI WINDOW_COMPFLAG_CANDRAG component parameters flag, so that window components can discriminate about whether to perform certain actions when dragged. The primary example is an icon, which can be dragged to new locations around the desktop, but doing so in other contexts (such as the taskbar or shutdown dialog) might be nonsensical and/or crashy.
For improved reliability, the FAT boot sector no longer has the OS loader’s starting sector written into it. Rather, it now uses the starting cluster number, to better survive operations such as a cluster resize.
Re-engineered the kernel’s existing network DHCP functionality, in preparation for proper network support in 0.9.
Removed incomplete TCP implementation from the network layer.
Additional maintenance of the existing network code, including solving a hang that was happening when enabling the PcNet network adapter. Added some network debugging, and tweaked some of the main network and device code.
Removed a bunch of legacy hardware detection stuff from the OS loader and the information it passes to the kernel.
Updated translation strings in the kernel message files, and in the Disk Manager’s German message file.
Added -d and -e command line options to the Network Devices (ifconfig) program, for (e)nabling or (d)isabling systemwide networking.
Changed the allocation of the memory manager’s used memory block list so that it’s dynamic, like the free memory bitmap, rather than compiled into the kernel as 90K of static uninititialized data.
The kernel’s file copy function now limits its buffer allocation to the maximum size of the disk cache.
Increased the SCSI USB disk driver’s read/write timeout so that it’s proportional to the number of sectors being operated upon.
The floppy disk driver now has a workaround to handle broken emulation software (VMware) that always sets the ‘media changed’ bit. Previously the filesystem layer would interpret this as the media having been removed.
The VSH library function vshFileList() now prints the amount of free space in megabytes, gigabytes, etc., rather than than bytes, when the numbers are large.
Before the OS loader sets the A20 address line, it now queries the BIOS about allowable methods, and if any are set, doesn’t attempt the other methods.
Removed the unused kernelMemoryBlockInfo() function, as it is not needed for the realloc() libc function.
Added some additional constants such as MS_PER_SEC to .
Moved operating system loader definitions from a kernel header file to <sys/osloader.h>.
Moved ELF binary/object format definitions from a kernel header file to <sys/elf.h>.
Removed the makepot.sh script from the utils directory, which was used to create all of the translation templates by hand. Added a new script called langstrings.sh which automates the whole process (making templates, merging translations) for all of the things that are currently translated.
Parameterized the utils/wget-site.sh script for the name of the website, and it now deletes some extra WordPress droppings.
Fixed: The ‘iconwin’ program that shows lists of icons (‘Programs’, ‘Administration’, etc) was not correctly finding its language-specific configuration files.
Fixed: The File Browser would frequently fail to correctly classify new files written into the current directory, because it was attempting to do so too quickly, before enough of the file had been written. The update detection is now more sophisticated, checking the directory mod time, latest file mod time, and sum of file sizes.
Fixed: Window menu bars were overlapping window borders on the right hand side, due to previous changes in support of on-the-fly language switching. Added a bit more intelligence re: maximum sizing of the menu bar and the coordinates of its component container.
Fixed: Booting problems on larger FAT filesystems. The loaderCalcVolInfo function was calculating the cluster buffer memory location using the entire on-disk size of the FATs, rather than the smaller number of sectors that we actually load into memory.
Fixed: APIC driver initialization would fail in the presence of multiple I/O APICS, as local APIC initialization for the boot CPU was being done inside of the I/O APIC loop.
Fixed: The APIC driver is now more flexible about I/O memory already having been mapped into the virtual address space.
Fixed: The APIC driver now only creates identity-mapped ISA interrupts for the first (starting IRQ=0) I/O APIC.
Fixed: The scheduling of a number of mostly-idle kernel threads and other processes was driving the CPU load to near 100%. Tweaked the scheduler and the chooseNextProcess() function so that, if a process has already yield()ed the current timeslice, it is less likely to be chosen again until the next timeslice.
Fixed: For device drivers (e.g. PCI-oriented) that share/chain interrupt vectors, if they don’t service the interrupt and don’t have a saved vector to call, they now send an acknowledgement to the interrupt controller, so that further interrupts to that vector are not locked out.
Fixed: The image-cd.sh script was generating an ISO image with incorrect file names (in particular, some of the font files). The arguments to ‘mkisofs’ have been changed to use ‘-iso-level 4’ (ISO9660 version 2) instead of -U (‘untranslated’).
Fixed: The AHCI SATA driver no longer calls the multitasker to wait for I/O when multitasking is not enabled (e.g. during initial disk enumeration).
Fixed: A kernel log corruption in flushLogStream() that would happen when the waiting buffered output was larger than 512 bytes and didn’t have a terminating NULL character.
Fixed: The kernel API and EXT filesystem driver were returning 64-bit values incorrectly. The userspace filesystemGetFreeBytes() function wasn’t working for values of > 32 bits.
Fixed: When installed in ‘basic’ mode, all filesystem format operations were failing, since libntfs was being dynamically linked to the format program. Both the Disk Manager and the format program now use dlopen()/dlsym() to check whether ntfsFormat() is available, and act accordingly (i.e. NTFS formatting is not available in ‘basic’ installations, but formatting other filesystem types is supposed to work).
Fixed: When installed in ‘basic’ mode, and using the kernel’s small built-in font, radio button circles were overlapping one another, and checkboxes didn’t align well with their labels.
Fixed: Improved handling of non-default desktop colours to the kernel and window system initializaion.
Fixed: When logging out from the ‘Exit’ menu, there was an error message (mostly just in the kernel.log) “It’s not possible to kill the kernel process”.
Fixed: When installed in ‘basic’ mode, the login program would emit spurious error messages whilst attempting to load keyboard maps and the Visopsys logo image.
Fixed: When installed in ‘basic’ mode, the Disk Manager would emits a spurious error message attempting to load its icon image.
Fixed: the version numbers of the API documents