ShellSince the last newsletter Giannis Adamopoulos has completed his development contract and while a more formal report will be published later, a brief summary follows. The fruits of his labor are already visible in that explorer_new can actually start in ReactOS and allow a user to browse the directories. Much of this was achieved by completing work Andrew Hill started. Giannis also spent considerable amounts of time trying to understand how the various menus in the shell worked.
Explorer Shell A while back the project announced a development contract for Giannis Adamopoulos to work on getting the necessary supports for running explorer-new to run on ReactOS. Since then, Giannis has been very busy and has made considerable progress. Much of his work has been properly separating responsibilities in the various components so that there are clear delineations of who does what. There are two major accomplishments, both fairly wide in scope.
C++ One of the last big missing pieces of building ReactOS using Visual Studio was support for C++. In ReactOS, the biggest piece of C++ code is explorer, without which users have no graphical shell when ReactOS boots up. Support for C++ requires not just a compiler capable of building C++ code, but also the presence of the standard template library. For developers where C++ was their first language, usage of the STL is fairly common and it is almost guaranteed to be linked in by default regardless of whether it is used or not.
Testing and Debugging The hardest thing about writing software is finding the source of bugs. Good testers are as such extremely valuable, and those able to use debuggers well even more so. Two issues were recently dealt with thanks to one such tester, Olaf Siejka. The first issue involved Microsoft Excel Viewer, an application that as its name suggests allows for viewing of spreadsheets but not editing. Word Viewer actually worked in ReactOS, and Excel Viewer's failure drew Olaf's attention.
OpenGL The ReactOS project has relied on the Mesa Project for OpenGL 3D graphics for a long time, but unfortunately the code needed by ReactOS is no longer maintained by Mesa. Actual rendering involves a chain of components, one of which is the called the installable client driver. The ICD is for the most part bundled with the graphics card driver, though it can also be a driver that performs rendering completely in software.
Site Migration The project recently migrated from its old site to one using the Drupal content management system. Work on this migration had been going on in some form for the last year, with a major milestone being the migration from Bugzilla to JIRA. The migration of the site proper however was nowhere as smooth as many people, including myself, desired. One of the root causes for the bumpy migration was my fault actually, when I sent an email claiming that the site's content was at a state where it should not be a blocker to migration.
Desktops and Windows In the Windows operating system, the desktop one sees is made up of three things, a kernel mode desktop object, a user mode desktop window, and a desktop thread. While the desktop object can be considered almost mundane, the window and thread are somewhat special. In Windows, desktop windows are created differently from regular windows and all share a single desktop thread. This thread handles messages sent to the desktop window, though users will generally only see the desktop window if the explorer shell is not running.
Win32 Improvements Deep within GDI is code designed to carry out a series of raster operations that involve applying patterns to bitmaps. For performance reasons, it is desirable to have optimized versions of this code for the various bit depths. Formally, ReactOS only generated these optimized versions for the few ternary raster operations that were used often enough to be given a common name by Microsoft. The rest were handled in a single unoptimized version.
Session Manager Subsystem Rewrite The session manager subsystem is responsible for initializing much of the operating system environment and starting up services and processes needed to get a user to the login screen. Specifically, it creates the environment variables inherited by other processes, loads the Win32 subsystem, sets up the pagefiles for virtual memory, and finally starts up the winlogon.exe process, amongst other things. The implementation that was in ReactOS took many shortcuts in how it communicated with subsystem components, which in turn led to those components not correctly implementing the interfaces SMSS was supposed to use.
Wireless Cameron Gutman has spent the last month or so adding the pieces needed to support wireless network cards to ReactOS. A good portion of the work entailed writing the NDIS protocol driver (ndisuio) that handles sending wireless NDIS object identifier (OID) messages. These messages handle querying network drivers about their status and capabilities and also set the receiving mode the device should operate in. In addition to the kernel side, a user mode utility is needed to let end users actually make these requests.