Nearly
ten years ago the ReactOS Project released version 0.3.0. Today we are
proud to announce the formal release of version 0.4.0. A great deal of
work has gone into making this release happen and as we look back it is
remarkable to consider how far the project has come since that release a
decade ago. This release is both a celebration of and a testament to
everything that the ReactOS team and community has achieved together.
Thank you to all of you for having stood by the project for this long
and we hope rewarding journey. For those of you chomping at the bit to
check out the release, go to the
download page to get it now.
In Memoriam
It cannot be emphasized enough that ReactOS is where it is today due
to the tireless efforts of the people that make up the project. Over the
course of the project developers have come and gone but they have all
left a mark whether it be in their code or the memories of their
interactions with those still with the project. Sadly in two cases these
memories are all that we shall ever receive from them. Gé van Geldorp
was one of the project’s earlier developers and was heavily involved in
the development of the win32 subsystem. He also helped mentor many other
developers that joined afterward and is fondly remembered for his
willingness to help those just getting started in the project. Brandon
Mark Turner was another developer in the earlier days of the project. He
worked out a variety of components and was responsible for some of the
initial work to make ReactOS buildable with Microsoft’s compiler
toolchain. The 0.4.0 release is dedicated to their memory and we hope
that its fruition will serve to show at least some degree of our immense
gratitude for the effort they put into this project.
Features
Here we document some of the highlights that separate 0.4.0 from not
just the 0.3.17 release but also the cumulative achievements that the
0.3.x series achieved.
First of course the bulletpoint shortlist for those of you who don't want to wade through my giant mountain of text.
User-Centric Improvements
- ext2 read/write and NTFS read support
- New explorer shell and theme support
- SerialATA support
- Sound support
- USB support
- VirtualBox and VirtualPC support
- Wireless networking
Developer-Centric Improvements
- CMake support for GCC and MSVC compilation
- Compilation times significantly improved
- GDB remote debugging interface for kernel debugging
- WinDBG support
And now onto the meat. In alphabetical order because it’s as good as any other order.
Build Modernization
Those who have been with the project since its early days will likely
shudder at recollecting the means by which ReactOS was compiled back
then. The first attempt to normalize the situation was in the RBuild
system, a custom build specification format based on XML that was
supposed to make it easy for developers to add new files and modules to
the project. While impressive for its time, it suffered from structural
issues that not only introduced very subtle bugs but also prevented the
project from using anything but GCC to compile ReactOS.
The solution to this was a migration to the CMake platform, an effort
that took many months and saw countless issues fixed. The first formal
release using the CMake-based build system was 0.3.15 and since then the
modernized build system has allowed developers to use not only GCC but
also Microsoft’s compiler and debugging suite to build and test ReactOS,
an ability that was crucial to many of the features and improvements
listed here today.
Filesystems
Since its earliest days ReactOS has relied on one form or another the
FAT filesystem. There was also significant interest from the community
for something better, or at least something different, but a variety of
technical difficulties prevented the operating system from supporting
anything else. While support for ext family of filesystems progressed
slowly but steadily probably the more exciting development has been
preliminary support for reading NTFS volumes. While bits and pieces of
the code were folded into 0.3.17, it was incomplete and 0.4.0 will be
the first version to actually provide out of the box support for reading
NTFS volumes.
Graphics
From 2D to 3D there were countless improvements to ReactOS’ graphics
stack. Optimization work resulted in considerably faster rendering of 2D
graphics, in some cases even beating performance on Windows, while
support for 3D graphics has steadily advanced since work began in the
0.3.7 time period. Furthermore, architectural fixes released as part of
0.3.8 saw the ability to properly load graphics drivers, another
milestone in the project’s goal of compatibility.
Memory
The memory manager, a central piece of any operating system and whose
stability and correctness underpins that of the rest of the system. The
memory manager that has been with the project for so many years finally
saw significant parts of it retired in the 0.3.15 release. More work
remains of course but a major milestone was achieved that day.
Networking
Support for networking was first formally introduced in the 0.3.0
release and since then the team has steadily improved upon the
functionality and features. These range from the mundane such as simply
fixing bugs to adding of wireless support in 0.3.14, affectionately
known as the the PI release internally. Since the 0.3.17 release the
project has also added in support for SSL, with the inclusion of the
mbed TLS library.
NTVDM
A much requested feature for ReactOS was support for 16bit DOS
applications. On Windows this support is provided by the NT Virtual DOS
Machine (NTVDM) and the ReactOS implementation of it was first formally
released in version 0.3.17. Needless to say since then the ReactOS NTVDM
has seen considerable improvement to the point where many of the
testers are sharing examples of old DOS games resurrected. And one of
the biggest advantages to the way in which NTVDM is implemented in
ReactOS is that support for it will continue on non IA-32 platforms,
including AMD64 and even ARM.
Registry
Hate it or love it, the registry underpins much of the operating
system’s configuration in the Windows family and like its NT-based
relatives ReactOS also possesses one. The project has gone to great
lengths to ensure that its implementation of the configuration manager
works not only in ReactOS but is also able to correctly read and modify a
registry from Windows, providing the ability for ReactOS’ own
bootloader to be able to boot Windows 2003 successfully.
Shell
The explorer shell used in 0.3.0 was originally introduced all the
way back in 0.2.0. When it was created ReactOS lacked the proper
infrastructure to actually support a proper graphical shell, forcing the
old explorer’s creator to reproduce much of the functionality, that was
supposed to be provided by the operating system, in the shell itself.
This worked for a time but as the OS became more complete the shell was
unable to benefit from these improvements. The new explorer shell and
all of its supporting infrastructure, and there was a great deal of
infrastructure at that, was a cumulative effort by several people and is
one of the truly new features being introduced in 0.4.0 with no
previous releases possessing it.
Storage
Much as PS/2 connectors slowly fell out of use for keyboards and
mice, storage devices in modern computers now use SATA instead of IDE.
ReactOS added support for such devices in 0.3.10 by importing the UniATA
driver and have steadily improved upon that support ever since.
Sound
What one might presume to be a rather basic piece of functionality
was actually an extremely complex undertaking. Support for sound arrived
in 0.3.9 and has progressively been improved upon ever since as we move
towards a new normal of expecting things to work instead of being
amazed that they do.
USB
In this day and age almost every peripheral comes with a USB
connector. Initially the project sought to simply provide support for
USB mice and keyboards, support first added in 0.3.10, but a full and
proper USB stack is ultimately a necessity in this day and age. This
stack was first provided in the 0.3.15 release and has seen continued
work since.
Visuals
Making the shell look nicer was another oft-requested improvement and
one that was a long time coming. In the course of adding that support
the project encountered a few bumps of course but in the 0.3.16 release
ReactOS was shipped with the Lautus theme for those that wanted to try
it out.
Final Notes
More detailed technical information about the release can of course be found on the
0.4.0 wiki page
with links to the changelog and other notes. Please also note that the
VirtualBox image is not yet live at the time of this release.