ReactOS 0.4.12 released

by Colin Finck | September 23, 2019

The ReactOS team is pleased to announce the release of version 0.4.12. As always a multitude of improvements have been made to all parts of the OS, though userland components saw special emphasis this time around.

Kernel improvements

Filesystem drivers require a great deal of support to function correctly, and there is arguably no truer test of ReactOS’ FS infrastructure than being able to run Microsoft’s own FS drivers. While the project is not quite there yet, driving towards this goal saw considerable improvements been made. Pierre Schweitzer and Thomas Faber paid particular attention to the common cache, a module with deep ties to the memory manager and which traditionally has been a very troublesome component. General stability saw marked improvement thanks to their contributions, along with that of Hermès Bélusca-Maïto in fixing up ReactOS’ own CDFS driver.

More general progress can be found in Eric Kohl’s progression towards proper device power management, an especially tricky feature that many take for granted these days on Windows laptops. If only people knew just how many steps were involved in putting a device to sleep and then waking it up again in a working state. Then again, anyone who has ever had to hard reboot a machine that won’t wake from sleep can probably attest to the difficulty even the biggest OS vendors in the world still grapple with.

Another feature that is certainly to be of greater interest to power users and IT specialists, Michael Fritscher has managed to fix support for PXE booting with ReactOS. In enterprise or industrial environments where central management of systems is a must, the more network functionality ReactOS provides, the more places it can find a use.

Fixed Kernel-Image-Protection

Security these days is a fundamental requirement of modern operating systems, and the ability for an OS to protect its own files is the foundations upon the rest of its security. To that end, most operating systems will have locks to prevent any random application from going and modifying images that are loaded and executed in the kernel space, such as the kernel itself (ntoskrnl), various feature subsystems (win32k), and of course general device drivers. ReactOS previously suffered from various bugs that prevented it from correctly doing this, but the write-protection functionality was rewritten during the run-up to 0.4.12, enabling its usage and also adding new features like execution protection just waiting for x64 to be fully enabled.

Window snapping

A general usability shortcut, the ability to snap windows to be aligned to sides or maximized and minimized by dragging it in specific directions is something of a staple. Its lack in ReactOS meant power-users and their muscle memory were hard put out, but with 0.4.12 this is no longer the case. Denis Malikov has implemented the necessary support to make window snapping work, and the project invites one and all to try it out. And needless to say, the project did not forget the keyboard shortcuts that accompany the feature.

Font improvements

Font rendering is one of those background details that when things go right, one barely notices. When things go wrong however, the results can render entire suites of applications unusable. The work to make font rendering more robust and correct in ReactOS is, like many other features, a work in progress and joint effort between multiple developers, with longtime contributors James Tabor, Katayama Hirofumi MZ, and Mark Jansen playing especially active roles. Nonetheless, several significant pieces fell into place to allow 0.4.12 to enjoy some marked improvements over its predecessors.

The single biggest fix that went into 0.4.12 would have to be a series of problems that badly garbled text rendering for buttons in a range of applications, from iTunes to various .NET applications as seen in the images below.

Intel e1000 NIC driver

While ReactOS’ traditional usage in virtual machines generally shields it from rapid and oft massive changes in hardware configurations, even the systems emulated by virtual machines have undergone some evolution over the years. Case in point, VirtualBox and VMware have been shifting their default emulated network interface card to be based off of the Intel e1000 NIC in order to present their guests with a gigabit capable interface.

Thanks to work done by Mark Jansen and Victor Perevertkin, ReactOS now possesses a driver that supports this NIC out of the box instead of requiring end-users to manually find and install a driver, a finicky process if one does not have a working network connection in the first place. Furthermore, the new driver should also be compatible with e1000 NICs in real hardware, though of course more real-world testing will be necessary to fully validate that assertion. Interested testers are of course encouraged to try and see just how much ReactOS can get out of the e1000.

New themes

ReactOS first gained theming support in the 0.3.x era, with the Lautus theme being the standard bundled to demonstrate the feature. With 0.4.12, the team is pleased to announce two new themes to add to its stable. The first is Lunar, created by Joann Mõndresku and Adam Slabon and designed to be reminiscent of the look and feel of XP while colored in the ReactOS style. The second is Mizu by Foxlet, which seeks to provide a flatter design that draws from the more modern design styles found in newer versions of Windows. A comparison of the two can be found below. Choice is always good, after all, and now users have more of them to find one that better suits their aesthetic tastes.

User-mode DLLs

A range of other improvements to user-mode components within ReactOS were made for 0.4.12, with some being more obvious than others. The most visible of course would be, more applications work, which is arguably the principal reason many users express interest in the project. Two outstanding improvements also help demonstrate the sort of contrast between the subtle and the dramatic in terms of ReactOS’ progress.

The common controls library (comctl) is used by basically all Windows applications to draw various generic user interface elements. Fix relating to it read extremely dryly and would be a list of things that most end users would not understand. Still, the sort of plumbing it supports is essential to the rest of the user experience, and every time a user is able to smoothly slide through an application is a testament to the effort put into the library by developers like Giannis Adamopoulos, Doug Lyons, Stanislav Motylkov, and Denis Malikov.

Speaking of Stanislav, another piece of work from him that made it into 0.4.12 represents the sort of dramatic, big step forward in that it enables an entire class of usage of the OS. MIDI devices have a long and storied history in the indie music scene and even today people are composing works that make use of their seemingly simplistic range. Due to that very history, MIDI devices and the software that supports them can be from what feels like a bygone era. ReactOS has always been about enabling people to keep using their existing hardware and software however, and Stanislav’s work now enables ReactOS to properly load the drivers for MIDI instruments and control them, thus opening up a whole new class of use for ReactOS.

Oh and while he was at it, he also animated the rotation bar in the startup/shutdown dialog, just like in the NT5 family. It’s the little things that count.

Misc improvements

As always, it would be physically impossible to do justice to all of the improvements and all the hard work done by the developers involved. From updates to the on-screen keyboard (Bisoc George), fixes to the calculator (Carlo Bramini), to quality of life improvements to the sound mixer dialog (Eric Kohl), one could go on and on and on. A summary can never do justice to everything that has been done, so we will have to content ourselves with the small window that it can provide.

Testing

As always, ReactOS’ progress would be impossible without the dedication put in by the various testers and bug reporters like Joachim Henze that dedicate time and effort to this project, in both initially filing issues and following up to verify that fixes actually work.

Third Party Syncs

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

  • Wine-Staging 4.0 by Amine Khaldi
  • btrfs v1.1 by Pierre Schweitzer
  • uniata v0.47 by Thomas Faber
  • ACPICA v20190405 by Thomas Faber
  • libpng v1.6.35 by Thomas Faber
  • mbedtls v2.7.10 by Thomas Faber
  • mpg123 v1.25.10 by Thomas Faber
  • libxml2 v2.9.9 by Thomas Faber
  • libxslt v1.1.33 by Thomas Faber
  • libtiff v4.0.10 by Thomas Faber

Statistics

JIRA issues fixed - 226
Number of commits - 1140
Oldest bug fixed for 0.4.12 - CORE-187 Local Dll override support in ReactOS (Mark Jansen)

releases/0.4.12 branch was forked from master on 2019-04-08 after 0.4.12-dev-1082-ge0e5363