- 1 User FAQ
- 1.1 What is ReactOS?
- 1.2 Why use ReactOS?
- 1.3 Is ReactOS based on Microsoft Windows™?
- 1.4 Is ReactOS based on *nix or Linux?
- 1.5 Is ReactOS legal?
- 1.6 Why does a certain application of mine not work under ReactOS?
- 1.7 Why doesn't ReactOS have a modern UI?
- 1.8 Why ReactOS? Why clone Microsoft Windows™?
- 1.9 Why don't you help develop Wine/Linux instead?
- 1.10 Why don't you help the Wine project instead?
- 1.11 Why not use UNIX instead?
- 1.12 Where can I download ReactOS?
- 1.13 How can I contribute to ReactOS?
- 1.14 I am an experienced coder... How can I help?
- 1.15 I don't know how to code but I want to learn. How?
- 1.16 I'll never know how to code... How can I still help?
- 1.17 I don't know how to test but I want to learn. How?
- 1.18 What can I do to help?
- 1.19 Who should I talk to about helping ReactOS?
- 1.20 When will ReactOS be done?
- 1.21 Why is ReactOS development so slow?
- 1.22 Can I test ReactOS without risking my existing hardware/installations?
- 1.23 Is ReactOS able to run Windows apps and Windows drivers?
- 1.24 How about Windows Vista™/7 programs and drivers?
- 1.25 Can I install ReactOS on a pen drive/stick?
- 1.26 My screen turns black when loading ReactOS. I don't see anything.
- 1.27 Does ReactOS have a POSIX subsystem?
- 1.28 I inserted the Installation CD but the installation doesn't begin
- 1.29 The installation hangs or hangs before reaching the Desktop
- 1.30 When is 0.5 appearing? And Beta? And 1.0? And 123.0? And...
- 1.31 Why there is no Roadmap?
- 2 Developer FAQ
- 2.1 General
- 2.1.1 What language do the developers use?
- 2.1.2 Why only C and assembly?
- 2.1.3 How do I get ReactOS' source code and build it?
- 2.1.4 Is there any kind of coding style that is expected?
- 2.1.5 How will you avoid the inevitable "Microsoft" text throughout ReactOS?
- 2.1.6 Will drivers designed for Windows work on ReactOS?
- 2.1.7 What do I need to compile ReactOS from sources?
- 2.1.8 What about the so-called SEH-problem?
- 2.2 Graphics Subsystem
- 2.3 Debugging
- 2.1 General
- 3 See Also
ReactOS (short for React Operating System) is an open-source effort to develop a quality operating system that is compatible with Microsoft Windows™ applications and drivers. ReactOS is based upon NT5. The current 'Windows', the version the general public is familiar with, is actually just one part of the modern Windows NT™ operating system. Users and developers are more familiar with the Win32 subsystem, a layer that sits upon the NT kernel providing the user and application interface. Most computer layman mistakenly think of 'NT' as 'WinNT 4' whilst in reality, the term "NT" refers to the whole NT series from 2000 until today. This ranges from version 3 to NT5 (2000, XP, 2003) and then from NT6 (Vista, 2008, 7, 8, 2012, 8.1) to NT10 (10, 2016). The NT architecture was designed by a team led by David Cutler, a former lead developer of Digital Equipment's VMS operating System. It took the team more than 4 years to combine the best of UNIX, VMS, and OS/2 to create the NT architecture. ReactOS aims to replicate this with NT5 (Server 2003) as its main target with the additional aim of compatibility with many of the APIs from later NT6 versions of the Windows o/s.
Why use ReactOS?
A lot of people in popular discussion forums quite rightly keep asking “why should I use ReactOS?” or “why would someone need ReactOS?” or “why not help develop Wine instead?” or “why not use Linux with Wine?”.
We have an answer for all these questions, but it's not in one simple magic word. Let's name a few key issues here that may help to answer that question:
- There are plenty of *nix operating systems out there - this is very good. However, they have different end-user targets (they perfectly fit the server market but the desktop still isn't fully conquered and several usability factors work against most Linux-based alternatives in the market today).
- There is currently no other operating system which implements the kernel architecture design of MS Windows NT™ so if you are unhappy with the direction or goal of Windows there is little real alternative. ReactOS was started as a “clone” of Windows NT to alleviate this situation. To demonstrate the concept of o/s cloning, GNU/Linux is the best for comparison here: Linux was started as a “clone” of Minix and Unix, eventually going on to be a Unix replacement.
- There are no plans for any of Microsoft's versions of Windows to be released under a GPL-compatible license (at least, the ReactOS team and the world are not aware of them).
- Linux+Wine is never going to be a complete replacement for a full Windows system. It's not only because of Linux (despite some user-friendly Linux distributions out there) and not only because many users might find a transition to Linux/BSD difficult but it is largely due to design and implementation decisions of Linux and Wine architectures which prevent 100% compatibility.
- Even though Linux supports many types of hardware, Windows is still the dominant platform for device manufacturers. There are attempts to overcome this situation (like the NDIS Wrapper for NT network card drivers, there are rumours about supporting NT video drivers and Captive NTFS for NT filesystem support) but ReactOS solves them from day one by its very design – being compatible with existing drivers and existing applications.
- There are many people who do not like how *nix systems behave or dislike the conventions used. For them, Linux, BSD and Mac OS X are not options, even before application compatibility and hardware support come into play. An operating system should give the consumers what they want instead of demanding that the consumer conform. Even with Wine, you are still running an operating system that behaves quite differently from Windows at both the user and system levels.
- Backwards compatibility. This is something vital for many people and companies but the development philosophy of Linux and the GNU project do not consider it a priority. The Windows family has always gone out of its way to ensure a stable API and backwards compatibility. By its design, ReactOS will also follow the philosophy of backward-compatibility with existing applications designed for the whole Windows NT family whilst providing compatibility to later developments too.
Finally, ReactOS offers a third alternative, for people who are fed up with Microsoft's policies but do not want to give up the familiar environment, architectural design, and millions of existing software applications and thousands of hardware drivers.
Is ReactOS based on Microsoft Windows™?
No! ReactOS consists only of GNU GPL (General Public License) and GPL compatible licensed source code.
Is ReactOS based on *nix or Linux?
No! ReactOS is not based on UNIX/Linux. It's written from scratch.
Is ReactOS legal?
Yes. ReactOS is fully legal.
Developers (devs) have not looked at Microsoft Windows™ source code. They have used the public documentation of Microsoft Windows OSes. They have made several tests to understand how Microsoft Windows works. In fact, ReactOS does the same things Microsoft Windows does, but not exactly in the same way, because they haven't the same source code. All code in ReactOS is under the GNU GPL (General Public License).
Why does a certain application of mine not work under ReactOS?
ReactOS is in alpha stage and not recommended for everyday use. Many applications do not work (correctly) because many API calls simply haven't been implemented yet. This may be one of the reasons for the software not working.
Why doesn't ReactOS have a modern UI?
The target is Windows 2003 and ReactOS' UI is based upon that. There are two alternative theme choices and both are suited for desktop operation. Note that neither of them are tablet-based themes as you will find in current Windows. Only the naive but uninformed user believes the UI look-and-feel is in any way tied to the real functionality of the o/s. If you are comparing the default UI with that of current Windows you may not appreciate that ReactOS' UI is configurable and the interface being FOSS will be customisable in a way that current Windows is not. Eventually it will be possible to configure ReactOS to look the way you desire with 3rd party tools and themes.
Why ReactOS? Why clone Microsoft Windows™?
First of all, ReactOS is not a clone of Windows. ReactOS is an operating system that is compatible with Microsoft Windows applications and drivers. Some of the reasons are the same as the reasons for developing Linux (an open-source UNIX clone)? In short, Linux is a great operating system, but it is not the answer for everybody. There are a lot of people that like Microsoft Windows, but are very frustrated with Microsoft's policies on various issues.
The 9x family of Microsoft Windows is based on DOS, and shares many of its weaknesses, which is the primary reason why Microsoft Windows has such a bad name. The Microsoft Windows NT™ family of Windows, however, has a solid design. Not everything is perfect, but without access to the source code, there is no way to fix it, so a compatible operating system must be built from the ground up.
Think of ReactOS as a community-created o/s with honourable goals, ie. to create a free-to-use Windows-compatible o/s that will be quick to install, quick to run and easy to operate. Think of it in the same spirit as a "Linux for Windows users" or perhaps more accurately as a "Windows o/s for Linux users"? Both built in the same spirit with a similar aim in mind.
ReactOS is a desirable object given that it should free Windows development from the shackles of Microsoft's current business model. That is a great target in itself. When it achieves beta release it will provide a home for the continued development of legacy applications (win32, MFC and the like) and their future will be rosy well away from the UWP framework that Microsoft is imposing upon users and developers in its current business aim to dominate tablet and IoT devices.
Why don't you help develop Wine/Linux instead?
ReactOS works very closely with Wine, and thus both projects actually benefit from each other. We have several developers in both the Wine and ReactOS projects that work on cross-compatibility issues between the two projects.
It is our view that Linux + Wine can never be a full replacement for Microsoft Windows™. ReactOS has the potential for a much higher degree of compatibility – especially for Microsoft Windows drivers – which Wine does not address.
Why don't you help the Wine project instead?
Actually we work very closely with the Wine project. Wine probably has a lot more in common with ReactOS than with Linux. The Wine project has the goal of implementing the entire windows API on top of WineServer. There are only a few Wine dlls that cannot be used in ReactOS. These are Ntdll.dll, User32.dll, Kernel32.dll, Gdi32.dll, and Advapi32.dll. The rest of Wine's DLLs can be shared with ReactOS. We have several developers in both the Wine and ReactOS projects that work on cross-compatibility issues between the two projects. It is our view that Linux + Wine can never be a full replacement for Microsoft Windows™. ReactOS has the potential for a much higher degree of compatibility – especially for Microsoft Windows drivers – which Wine does not address.
Why not use UNIX instead?
Mac OS X, Linux, BSD and other UNIX derivatives share a common heritage based on a more than three decades old design of a simple basic operating syste, that has evolved over time into a complex structure. Modern incarnations like Mac OS X put a fancy graphical user interface on top of UNIX, to hide system details but focus mainly on beginners, thus many advanced users are left out in the rain as most advanced features cannot be accessed from the graphical user interface. Almost all UNIX flavors retain some of the original design flaws and binary compatibility between various versions is usually non-existent.
In theory, there are a few UNIX standards like POSIX but in practice, the standards are old and cover only the basic operating system and the terminal environment. Other standards such as the Linux Standard Base are often not implemented faithfully. As there is no standard user interface nor a standard API, most people still have to use command-line applications or fight through the GUI mess. Many UNIX derivatives use the de-facto standard X-Window system for graphical output which might well possess one of the worst designs in software history. Still, modern UNIX derivatives are trying to catch up with recent innovations and some of them already possess important features like access control list support.
In contrast to UNIX, ReactOS was designed for people familiar and comfortable with the Windows environment. Everything can be done through the well known Win32 user interface and advanced users are free to automate tasks with scripts or use the console.
Where can I download ReactOS?
Please visit the download page.
In addition, official ReactOS nightly builds are available at Nightly Build page. Builds are generated for every commit and include full installation and live ISOs, both debug and release versions.
How can I contribute to ReactOS?
- We need coordinated testers, which means we need people that help us testing in a coordinated way.
To join our testing come to the Mattermost discussion channels. Find any dev and ask us what to test. Every day the ReactOS project has different testing needs so testing is not boring.
- We need coordinated translators.
- We need coordinated designers.
- We need coordinated developers.
- We need coordinated bloggers
To find your place just come and join the Mattermost discussion channels. See you there.
I am an experienced coder... How can I help?
If you are a developer experienced in C and C++ then join Mattermost discussion channels. There you can ask questions regarding our code and find a component upon which to work. You can select any component that interests you but first contact us and tell us what you are planning to do. Other developers may already be working in that particular area. As Yoda says: "efforts co-ordinated, time wasted less when...".
I don't know how to code but I want to learn. How?
Study C, C++, WinAPI, then read books as "Windows Internals" and/or "Operating System Concepts". Come and ask us. For C and C++ questions you have the C and C++ Mattermost discussion channels, they will solve your doubts much faster.
I'll never know how to code... How can I still help?
Developers always require testing of something. Just come to Mattermost discussion channels and ask for something to test. Developers will give you some ReactOS testing work suited to your skills. The "I don't know how to code" is the preferred excuse followed by the "I don't have time" or "Each time I test ReactOS god kills a kitty" excuses.
I don't know how to test but I want to learn. How?
First of all, don't raise loads of issues on Mattermost or on the forum. By all means, use this as a method of raising awareness on an issue but if you are really going to help raise a ticket! This means opening a bug report on our bug reporting system known as JIRA. You can log in using your ReactOS website credentials. If you have questions regarding filing bugs, please see the helpful WIKI entry here - Filing bugs on JIRA
What can I do to help?
We're always looking for either coders or testers. We're especially in need of people who know how to write NT drivers because our current drivers could use some improvement.
Testing on real hardware is especially important as the kernel rewrite approaches completion. Some issues are known, such as missing assembly code and broken implementations causing issues on certain processors. Bugs found in the trunk can be reported in Jira, but try to avoid entering duplicate bugs.
Who should I talk to about helping ReactOS?
The best way to get in touch with a developer is to hop onto the Mattermost discussion channels.
Alternatively, you can use the IRC channel that is still used by some developers.
A list of the developers, their IRC nicks, and their respective fields is here: Developer Roles
Note: If you have a question, don't first ask to ask the question. Just ask the question and if someone knows the answer, they'll usually answer. If you want a specific developer then ping that developer and ask the question.
Others will be added as I figure out what they do.
Another way is to join the ROS-dev mailing list:
When will ReactOS be done?
First you need to define what ReactOS should be capable of when it is to be considered done. Since this definition may vary greatly between people, this question cannot be completely answered. One thing is for sure: ReactOS will continue to be developed, as there will always be a need for improvements. For more information, visit the Roadmap page (note it is impossible to provide a time-dependent roadmap at this stage of ReactOS development).
Why is ReactOS development so slow?
First of all, developing a Windows-compatible o/s is an enormous task due to the sheer complexity of Windows and its undocumented nature. The team cannot work with Microsoft sourced code and all development has to be done via a process called clean-room engineering ensuring that no ReactOS source is contaminated by developer exposure to any copyrighted code from Microsoft. In addition, the slow development progress is primarily due to the 'enthusiast' approach of development ie. the developers are simply people like you and I. They work on whatever task that takes their interest, spending as much of their spare time as they can, working on the project. The complexity of writing an o/s from scratch also requires certain skill-sets that are not generally available within the enthusiast programming community, ie. competent Windows Kernel Developers available to contribute - are thin on the ground. The slow pace is also partly due to the lack of sponsors, leading to the majority of code being contributed by unpaid effort. Despite this, recent testing shows how much ReactOS has progressed and it is remarkable how much the project has achieved (see ReactOS Epic Wins) but it has a long way to go before approaching beta stage. However, developers have a firm target and the team is a dynamic one with solid supporters and contributors, meaning that the task is achievable, it'll just take a while. The ReactOS team likes to think of progress as being steady rather than slow.
Can I test ReactOS without risking my existing hardware/installations?
Yes, you can test ReactOS on virtual hardware. This way, you can start ReactOS in a window without leaving your operating system. Official preloaded packages for Qemu, VMware, and VirtualBox are available in the "Advanced Downloads" section of the download page. ReactOS is also known to run in Bochs and VirtualPC. If you know of other virtual machines that support it, please send an e-mail to the ros-dev mailing list.
Because a virtual machine is an emulated environment, a virtual machine can not run ReactOS as fast as ReactOS could run on the actual hardware. Virtual machines like Qemu that emulate hardware at the instruction decoding level will run ReactOS much slower than actual hardware.
Is ReactOS able to run Windows apps and Windows drivers?
Yes. ReactOS is able to load Windows apps and Windows drivers without hacking them. Remember: we are still in the Alpha stage so we have a long walk ahead before we reach these objectives. You can visit our Software and Hardware Compatibility databases to know which Drivers and Apps are compatible with the latest ReactOS version.
The original target for ReactOS, with regards to driver and application compatibility, was Microsoft Windows NT 4.0™. Since then, Microsoft Windows 2000, XP, Server 2003, Vista, and others have been released. All these are descendants of Windows NT. As such we can gradually shift our compatibility target without worrying about the architecture changing too much. In fact, internally, Windows 2000 reports version information as Windows 5.0, XP as Windows 5.1, 2003 Server as Windows 5.2, and Vista as Windows 6.0. The ReactOS team currently targets Windows 2003 Server as the official compatibility target. Of the current releases, 2003 Server has proven to be one of the most robust.
How about Windows Vista™/7 programs and drivers?
The present compatibility target for ReactOS of Microsoft Windows Server 2003™ (NT 5.2) does not mean that features present in later versions of Windows NT™ based operating systems will not be implemented in ReactOS. Work is continually done to implement newer APIs or to provide for their future implementation.
Can I install ReactOS on a pen drive/stick?
ReactOS' state of development is a process of continuous change and as such USB support is under development but improving. For more details See: LiveUSB
My screen turns black when loading ReactOS. I don't see anything.
It seems your video card is not yet compatible with ReactOS, search our Hardware Compatibility Database to find a compatible one. Also report yours as not compatible, it will help others. Share your findings!
Does ReactOS have a POSIX subsystem?
- We currently don't have a POSIX subsystem. Well, we have one but it's broken and it's not a priority in terms of compatibility. After all, we're trying to run Windows programs here, not POSIX programs.
- Think first: ReactOS should be stable and support a good deal of windows apps. Then worry about POSIX/*NIX, Mac, WinCe, OS/2, RiscOS, whatever else...
I inserted the Installation CD but the installation doesn't begin
Maybe your CD/DVD is a SATA device that UniATA doesn't support yet. (So neither does ReactOS). If your CD/DVD is ATA then try the next trick:
OPTIONAL STEP (make backup files): 1)Back up uniata.sys as uniataB_UP.sys. 2)Back up atapi.sys as atapiB_UP.sys
REPLACING 3)Rename uniata.sys to atapi2.sys 4)Rename atapi.sys to uniata.sys 5)Rename atapi2.sys to atapi.sys
If you damage or lose the files when replacing them, you can use the backup files from the Optional Step.
The installation hangs or hangs before reaching the Desktop
Try the "I inserted the Installation CD but the installation doesn't begin" trick if your HDD is an ATA device. Remember that trick doesn't work at all with SATA devices.
When is 0.5 appearing? And Beta? And 1.0? And 123.0? And...
It depends. We need Developers and Testers (Coordinated Testers). Statistics suggest that 99.99% of the forum users who ask these questions have never helped in a Coordinated Testing. So stop asking and use that time to help us, if you want it asap then contribute a little. Money is appreciated but testing is much more useful at current stage.
We perform several Coordinated Testings via Mattermost discussion channels. Join them and you will discover the feelings of being part of the Community, not just part of the Forum.
Why there is no Roadmap?
An OS covers a wide area of knowledge, it is not an App, it is a whole,-on-the-way-to-becoming-first-class OS. So we need developers from all the areas. It's not easy to find skilled developers and also, they are not paid, they have their real-life-work, families and problems. So no, we can't press them to work in a particular area. We can just thank them for dedicating some time to make this OS become a reality.
What language do the developers use?
C and assembly, with very little C++ for some included programs. In the OS itself, only C and assembly is allowed.
Why only C and assembly?
The reasoning is actually because of the tools we use. GCC's C++ compiler is less than stellar so we limit things to C and assembly to make our lives easier.
How do I get ReactOS' source code and build it?
This information is covered on this page: Build Environment
The recommended build environment is the RosBE. It's designed to run on Windows and *nix, though the *nix version may not be as up to date as the Windows version.
Is there any kind of coding style that is expected?
See Coding Style
How will you avoid the inevitable "Microsoft" text throughout ReactOS?
We believe that this falls under fair use. It is also not needed except in the registry.
Will drivers designed for Windows work on ReactOS?
Some drivers have been known to work, but at this point, there is no definitive answer as some facilities in kernel land that are unimplemented.
What do I need to compile ReactOS from sources?
Refer to our Build Environment page for information on how to compile ReactOS from the source.
What about the so-called SEH-problem?
Structured exception handling (SEH) is used in programming ReactOS as it is used in programming for OS/2 or Microsoft(R) Windows(R) NT. SEH is a game which is played between the OS and compiler (Keywords: __try, __except, __finally). ReactOS itself is SEH-aware and provides the infrastructure. However, up till now, the GNU-compiler used is not capable of generating SEH-aware code. So one can't compile a driver or program which uses SEH with the GNU-Compiler.
Why is the graphics subsystem not in Ring 3 but in Ring 0?
The short answer is that because Microsoft has done it this way, and we aim for driver compatibility, we have to do it the same way.
Why did Microsoft put the GUI in Ring 0?
Because this gives quite an advantage in speed. Contrary to a GUI-server, which will run in its own process, there are no context changes necessary when performing GUI operations. This does make the architecture less clean of course, and when the GUI crashes, the whole system crashes. The same discussion took place in Redmond when the GUI went into the kernel in Microsoft(R) Windows(R) NT 4.0. They came to the conclusion that the GUI has matured, so that nothing will go wrong unless a faulty driver is present, and that the consequences are similar to when something goes wrong in user mode.
Does ReactOS have the same security problems as Microsoft Windows™?
Microsoft Windows NT™ and successors aren't really inherently insecure systems. We believe that Microsoft® made a secure system insecure as a result of some poor decisions. For example, Windows XP™ gives every user Administrator rights by default. Some services are poorly implemented and ease of use often takes priority over security. We can, however, rearrange these priorities in ReactOS. What will be problematic is that for a long time Microsoft hadn't pressured software creators to design their products to run with Normal user rights.
How do I trace an unhandled exception in user mode?
The trace looks something like this: (KERNEL32:process/create.c:328) Process terminated abnormally due to unhandled exception (KERNEL32:process/create.c:329) Address: 761a13e0 (KERNEL32:process/create.c:334) Frames: (KERNEL32:process/create.c:338) 761a2be9 Look at ReactOS/baseaddress.cfg, find the nearest lower address that matches the address you're trying to trace. Open the .map file for the corresponding DLL in the viewer and search for the offset.