ReactOS 50 Published by

A new version of the Windows NT compatible ReactOS has been released



The ReactOS team is pleased to announce the release of version 0.4.11. This version has seen substantial work done to the kernel, helping improve overall system stability.

Kernel Improvements
While the term kernel is used as a sort of catch-all term, in truth the range of functionality that it encapsulates is quite wide. One case in point is the kernel’s responsibility for managing file I/O. A mistake here can cause subtle data corruption to more obvious hard crashes. Pierre Schweitzer’s fixes to the cache controller’s management of its data structures has removed at least one source of blue screens that occurred when attempting to backup a disk’s partition using the ODIN backup software.

Storage improvements were something of a theme in kernel improvements this time around, as work was also done on the filesystems ReactOS supports. While the fastfat driver is an inhouse filesystem driver, ReactOS has always relied on a third party driver for BTRFS support. This reliance however feeds back, as problems ReactOS discover in our usage of the driver can be sent back upstream to help improve it further. Such was the case with a major memory leak problem that Thomas Faber was able to track down.

And speaking of storage, the very interfaces that allows operating systems to talk with storage devices has undergone considerable change since the good old days of IDE and parallel connectors. These days most computers make use of SATA connections and the corresponding AHCI interface, support for which ReactOS relies upon the UniATA driver for. When the 6th generation of Intel’s Core processors (Skylake) was released, it was accompanied by a chipset platform whose AHCI SATA controllers proved incompatible with UniATA. This incompatibility has now been resolved by Alexander Telyatnikov, allowing users wishing to test ReactOS on more modern platforms to better make use of those platforms’ capabilities.

Application Start/Stop
When an application is run, it often depends upon other libraries in the form of DLLs. The loader (LDR) is responsible for finding and loading the respective dependent DLLs, and correctly iterating over these dependencies is fundamental to getting anything to run. One manner of specifying these dependencies is with the use of something called manifests, which was not properly supported in ReactOS. Considering that many modern applications make use of manifests, this was a very glaring hole. Mark Jansen’s work in the runup to 0.4.11 has however added sufficient support for manifests that the range of applications now able to start in ReactOS has significantly widened. Some examples of the newly enabled applications include Blender 2.57b, shown in the screenshot below, Bumptop, Evernote 5.8.3, Quicktime Player 7.7.9, and many others that users have the opportunity to discover for themselves.

Stopping an application correctly is often just as important from a system stability perspective, as it is when a program is stopped that its previously allocated resources are freed up. For a long time ReactOS had particular difficulty when it came to dealing with the shutdown sequence for .NET 2.0 applications, often times not waiting long enough for these applications to properly exit. Work by Giannis Adamopoulos has however resolved this particular problem, adding further to ReactOS’ usefulness as a platform to run Windows compatible applications.

USETUP Improvements
While the community wishlist for quality of life improvements in ReactOS is quite lengthy, one especially longstanding one has been the ability to upgrade an existing installation of ReactOS. Achieving this has required substantial effort in the USETUP module, effort that Hermès Bélusca-Maïto put considerable time into. The importance of this is twofold. The obvious enhancement is the ability to perform the upgrade, but the more substantive point is what this functionality entails for the future. For ReactOS to be usable as an actual system OS, it needs the ability to update in-place without losing user data and configuration. While requiring the user to go through the system installation process is still far from the user friendliness of other modern operating systems, it is still a substantial step forward and lays the foundation for ReactOS’ maturation into an everyday driver of people’s computers.

Win32
The Win32 subsystem responsible for graphical rendering in ReactOS is by itself a substantial beast. Improvements here often tend towards the most user visible of changes, since it is the engine through which the user will most interact with the operating system.

Those familiar with the NT family’s basic design will recall that prior to the NT6 line that began with Windows Vista, there was a substantial block of functionality implemented inside the kernel space of the operating system. This block is commonly referred to as win32k, and because of its wide ranging kernel level privileges, problems within win32k can hard crash the entire system. Even something as seemingly basic as menus is reliant on functionality inside win32k, and fixing that related functionality was the focus of much effort by several developers.

Basic robustness was the emphasis Thomas Faber focused on, running the menu code through a torture test that would see constant switching between different windows to make sure no resources or the like leaked across the different processes. One must recall that while in user mode applications are partitioned off, in kernel mode resources are effectively in a single space and the appropriate bookkeeping must be maintained to avoid crashes. Speaking of crashes, Mark Jansen also identified a problem with scrollbar initialization whose resolution has added yet another range of applications into ReactOS’ library of compatible programs. Case in point is the 32bit Civilization II Multiplayer Gold Edition version 1.3, as demonstrated in the screenshot below, and others like IceChat 7.63.

The visual correctness of menu elements is also important, as misaligned elements can produce graphically jarring displays. As such while subtle, Katayama Hirofumi’s correction of the y-coordinate calculation for menu items adds a touch of detail that is the difference between a polished graphical experience and one that is just good enough.

Menus can also extend to more than just the menu bar we often see at the top of applications. There are also pop-up menus like when one right-clicks on an item, as in the case of icons in the taskbar’s system tray. Mark was again responsible for this fix, which resolved the issue of incorrectly selected options when one tried to use the systray. Users can be thankful that one more source of frustration has now been squashed.

Finally, one must recall that not the entire world uses the left-to-right display standard to English and other Latin based languages. Many, such as Hebrew and Arabic, use a right-to-left orientation. ReactOS’ support for this type of text rendering was first officially exposed in 0.4.10, but the effort remains a work in progress. That progress took a substantive leap with work done by Baruch Rutman to adapt the USP10 library and Bidirectional support code from Wine to ReactOS. More work of course remains to be done, but it is the nature of open source development to take an iterative approach, building improvements one upon another.

Networking
While end user improvements are often the most visible, quality of life improvements for power users, administrators, and developers have a certain multiplicative effect as well. To that end, the enablement of various network debugging and diagnosis programs by Pierre’s work in TCP and UDP connection enumeration is important in a more subtle way. While debugging network applications is a far from common use case for the average user, it is a crucial ability for people that work in IT or general software development. In this manner ReactOS is becoming useful as not just a platform for running applications, but also to debug them. And as history has shown, the ease of development and administration is a key feature in adoption by the wider tech industry.

Stability and Testing
As ReactOS continues to grow in stability and maturity, the breadth and depth of testing necessary also increases, if only because there are more candidate applications to test. To this end Joachim Henze has with his usual dedication and perseverance worked to ensure the right balance was struck for this release in terms of stability and new/improved features. While it is always tempting to bring forward changes and fixes in the latest and greatest, one must recall that every such change brings with it a certain degree of risk. The ability to weigh that risk with the likely benefits is what makes quality assurance personnel like Joachim invaluable to any fast moving project.

In light of ReactOS’ expansive improvements, and to help prospective users better understand the state of the OS and its supported applications, Joachim has also restructured the test results page to better encapsulate the relevant information. There one can now see not only the overall conclusion of the test, but also details such as track what drove a particular conclusion as well as any workarounds that they might themselves attempt. A marked step forward from the binary of works/fails, since a workaround suggests at least a starting point for a permanent solution to be found.

Third Party Syncs
The current third party sources that ReactOS syncs with have been brought to the following versions by their respective minders.

ACPICA version 20181003, by Thomas Faber
PCI hardware ID database 2018-11-21, by Hermès Bélusca-Maïto
Wine Staging 3.17, by Amine Khaldi

Community Changelog-0.4.11
Kernel:

CC: Rewritten BCB handling and creating. This will improve data mapping. (Pierre Schweitzer)
CC: Fixed reference counting for BCBs. This fixes a crash triggered by building ReactOS on ReactOS. (Pierre Schweitzer)
CC: More fixes for reading and writing large files. (Pierre Schweitzer)
CC: Fixed VACB double-free and avoid freeing uninitialized memory. This fixes a crash encountered in ODIN (Open Disk Imager in a Nutshell) application when backing up data. (Pierre Schweitzer)
EX: Added support for cache-aware rundown protections. (Pierre Schweitzer)
IO: A fix have been made for file object locking, making ReactOS faster when locking and preventing busy-waits. (Thomas Faber)
IO: Work for getting filter driver running have been made. (Pierre Schweitzer)
IO: Some more support for DOS names have been added. (Pierre Schweitzer)
IO: Finally removed some hacks, making system more stable. (Hermes Belusca-Maito)
IO: Devices now have correct ACLs. (Pierre Schweitzer)
SE: Fixes for tokens. (Hermes Belusca-Maito)
PNP: Fixed PnP error when installing Office 2010. (Eric Kohl)
CM: More robust hive creation. (Hermes Belusca-Maito)
CM: Improvements for key (un)loading. (Hermes Belusca-Maito)
OB: Added support for unsecure global names. This is needed for preventing some .NET regressions. (Pierre Schweitzer)
freeldr: Correctly handle F8 keypress when timeout is set to zero. (Hermes Belusca-Maito)
Setup:

usetup/setuplib: Major progress for 1st stage GUI setup have been merged. (Hermes Belusca-Maito)
- Offline ReactOS registry initialization;
- Work-in-progress code that allows verifying whether registry hives are valid;
- Add an upgrade/repair installation page;
- More code modularization in order to use the same file-installation functions in both the text-mode and the GUI-mode setup;
- Dismount a disk partition before deleting it;
- Use filesystem detection code based on recognition by FSDs ...
- ... and more!
usetup: Implemented shutdown timeout progress bar. (Bisoc George, Stanislav Motylkov)
usetup: Partition table structure is changed to provide compatibility with modern operating systems and disk utilities. (Pierre Schweitzer)
usetup: Additional checks for creating partitions are added. This prevents disk corruption. (Hermes Belusca-Maito)
Win32 subsystem:

lpk: Finished the BiDi support. Now these characters are correctly rendered in all areas. (Baruch Rutman)
win32ss/ntgdi: Some fixes for pen drawing. (Katayama Hirofumi MZ)
win32ss/ntuser: Fixed a crash triggered by moving some windows around. (Thomas Faber)
win32ss/ntuser: A problem about window switching was fixed. (Katayama Hirofumi MZ)
win32ss/ntuser: Beginnings of implementation of ghosting windows for hanging applications. More will come in next release. (Katayama Hirofumi MZ)
win32ss/ntuser: Fixed a BSoD caused by constantly switching Explorer windows with right-click menu. (Thomas Faber)
win32ss/ntuser: Fixed a crash affecting many installers. (Thomas Faber)
win32ss/font: Fixed a bug causes Google Chrome not rendering web pages. (Katayama Hirofumi MZ)
win32ss/font: Improvements in font penalty, this makes fonts more correctly rendered. (Katayama Hirofumi MZ)
win32ss/font: Fixed a crash when browsing some websites with Firefox. (Katayama Hirofumi MZ)
win32ss/menu: Fix Y-axis positioning of texts. (Katayama Hirofumi MZ)
win32ss: Fixed memory for scrollbars. This fixes running at least Civilization II and Click-n-Type. (Mark Jansen)
fonts: Various improvements. Added some substitutes. (Katayama Hirofumi MZ)
user32: Fixed the button Y positioning. (Katayama Hirofumi MZ)
user32: Fixed task switcher. (Katayama Hirofumi MZ)
gdiplus: Fixed a gradient painting regression. (Nikolay Sivov)
winlogon: Disconnect from remote locations when logging off. This fixes duplicate network drives showing in ReactOS Explorer. (Pierre Schweitzer)
rpcss: Fixed a bug about system accounts, also re-enabling Office 2010 installation. (Hermes Belusca-Maito)
ntvdm: CD-ROM access is now allowed for DOS programs. (Mark Jansen, Pierre Schweitzer)
winsrv: Improve the shutdown sequence. Properly wait for each process to exit. This fixes a major bug nicknamed ".NET 2.0 chaos", causing system to become damaged and unresponsive after closing .NET apps. (Giannis Adamopoulos)
Drivers:

cdfs: Properly check for legal file names. (Pierre Schweitzer)
btrfs: Fixed a major leak. (Thomas Faber)
fastfat: Improved and fixed bugs when dismounting a disk volume. This fixes many setup problems. (Hermes Belusca-Maito)
ntfs: Fix bug with partial directory reads. (Pierre Schweitzer)
usbuhci_new: Bring in new UHCI driver, not activated yet. (Vadim Galyant)
usbehci_new: Bring in new EHCI driver, not activated yet. (Vadim Galyant)
uniata: AHCI revision 1.3.1 (Intel Skylake) disks now work. (Aleksandr Telyatnikov)
ramdisk: Allow installing ReactOS from BootCD via PXE network boot with RAM disk. (Bernhard Feichtinger)
fltmgr: Major progress have been made to get filter driver functioning for some programs. (Pierre Schweitzer, Ged Murphy)
tcpip: Implement enumeration of active TCP and UDP connections and retrieving them. This allows to use netstat, PortExpert, TcpView and CurrPorts in ReactOS. (Pierre Schweitzer)
Shell:

Fixed prompt interruption issue with Ctrl+C in Command Prompt. (Stanislav Motylkov)
Various fixes in the command line utilities based on Coverity. (Pako Smith)
Fixed a bug in File Browser when showing main window. (Giannis Adamopoulos)
System DLLs:

ntdll/ldr: Properly load kernel32, allowing registering kernel32 for manifest probing when loading DLLs. This fixes starting lots of apps. (Mark Jansen)
ntdll: Implemented FLS callbacks. (Mark Jansen)
advapi32: Work on security keys and password encryption. (Eric Kohl)
advapi32: A bug preventing Java 7 installation is fixed. (Hermes Belusca-Maito)
kernel32: Unhandled exceptions in a thread are now reported to Dr. Watson. (Mark Jansen)
opengl32: Preparation of fixes to make ReactOS work with NVidia GPU drivers, work in progress. (Bernhard Feichtinger)
User-mode DLLs:

shell32: Fixed a regression that causes shortcuts not displaying correct icon or just a generic icon. (Katayama Hirofumi MZ, Hermes Belusca-Maito)
shell32: Fixed Quick Launch not opening in LiveCD. (Hermes Belusca-Maito)
shell32: Various fixes and improvements for icon pick dialog. (Hermes Belusca-Maito)
shell32: Fixed a bug with duplicated double quotes in path while opening files with custom applications. (Giannis Adamopoulos)
shell32: Improve file properties dialog. (Stanislav Motylkov, Giannis Adamopoulos, Joachim Henze)
shell32: Fix dragging multiple files with right mouse button and then showing context menu. (Giannis Adamopoulos)
shell32: Don't expose buttons on the taskbar for folder options and file properties dialogs. (Katayama Hirofumi MZ)
shell32: URLs are now accepted in Run dialog. (Katayama Hirofumi MZ)
shell32: Environment variables are now accepted in Run dialog. (Katayama Hirofumi MZ)
browseui: Implemented toggling folders and search band with the toolbar. (Giannis Adamopoulos)
browseui: Properly fix displaying current path in the explorer address bar. (Doug Lyons)
comctl32: Unregister some classes. This reduces some crashes. (Mark Jansen)
ole32: Fixed a bug prevented deleting any file or folder via context menu. (Mark Jansen)
netapi32: Implemented network group functions. (Eric Kohl)
netapi32: Improvements for account logon. (Eric Kohl)
mpr: Properly disconnect remote drives on logout. (Pierre Schweitzer)
mpr: Properly enumerate and mount persistent network drives. (Pierre Schweitzer)
mpr: Implemented remembered connection enumeration. (Pierre Schweitzer)
mpr: Implemented adding and deleting persistent connections. (Pierre Schweitzer)
iphlpapi: More progress to get some more apps working. Also fixed some heap corruptions. (Pierre Schweitzer)
netshell: Fixed crash when a network drive is attempted to get renamed with explorer. (Giannis Adamopoulos)
netshell: Major rewrite and improvements. (Giannis Adamopoulos)
shimgvw: GIF animations are now played. (Katayama Hirofumi MZ, Stanislav Motylkov)
msv1_0: Implemented account expiration. (Eric Kohl)
setupapi: Fixed regression of Device Manager not installing tons of devices. (Eric Kohl)
winmm: Attempt to load each driver only once, reducing CPU usage. (Baruch Rutman)
xolehlp: Added DLL from Wine-Staging 3.21. This fixed some issues with installing Microsoft SQL Server 2005 Express Edition. (Hermes Belusca-Maito)
apisets: Begin implementing versioned API forwarders for application compatibility, work in progress. (Mark Jansen)
Commands and utilities:

net: Lots of minor improvements and some bug fixes. (Eric Kohl)
cpl: Position fixup for various CPLs after font metrics fixes. (Stanislav Motylkov)
sysdm.cpl: Added view for system hardware model name and uptime information. (Stanislav Motylkov)
inetcpl.cpl: Fixed icons for trusted and restricted zones. (Stanislav Motylkov)
msports: Implemented serial port settings. (Eric Kohl)
netcfgx: Implemented basic settings for network adapters. (Eric Kohl)
services: Various minor improvements. (Eric Kohl)
magnify: Fixed the magnification ratio bug. (Benjamin Chris)
regedit: Fixed some glitches. (Katayama Hirofumi MZ)
mspaint: Fix scrollbar presence on canvas. (Stefan Fulea)
osk: Add the welcome message box and the minimize button. (Bisoc George)
drwtsn32: Include extended system and baseboard information in Dr. Watson's application crash logs. (Stanislav Motylkov)
notepad: Improve and simplify About dialog appearance. (Erdem Ersoy)
Tasks:

acpica: Updated to version 20181003. (Thomas Faber)
User-mode DLLs are synced with Wine Staging 3.17. (Amine Khaldi) WineD3D and DirectX DLLs are not synced yet due to regressions.
Fixed bugs in multiple modules detected by Coverity. (Pierre Schweitzer)
hal: Updated the PCI hardware IDs database to version 2018-11-21 03:15:02. (Hermes Belusca-Maito)
libtirpc: Backported fix for CVE-2018-14621 vulnerability. (Pierre Schweitzer)
Added an easy way to include 3rd party files to the installation. A new modules/3rdparty directory is added which lets the files end up in C:\ReactOS\3rdParty ready for use. (Bernhard Feichtinger)
Added support for Romanian Standard Keyboard layout. (Stefan Fulea)
Outside the tree:

Major work on Plug and Play and HAL has been done in order to fix driver issues, work in progress. (Vadim Galyant)
  ReactOS 0.4.11 released