<html>
<head>
<title>OS/2 subsystem for ReactOS</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<h1><b>OS/2 subsystem for ReactOS (ROS/2)</b></h1>
<h2><font color="#009966">Introduction</font></h2>
<p>The OS/2 subsystem is being developed to enable NT-like systems (like WinNT 
  and ReactOS) to run 32-Bit OS/2 applications natively. With this it shall provide 
  binary compatiblility on x86-Based systems. It is intended to port the ROS/2 
  also to other platforms supported by ReactOS / NT. It is planned to provide 
  source code compatibility on these platforms. Yeeahh, OS/2 for PowerPC is in 
  sight.</p>
<h2><font color="#009966">Components</font></h2>
<p>ROS/2 consists of the following components:</p>
<ul>
  <li>OS2SS.EXE - A native application that implements the personality of the 
    OS/2 kernel.</li>
  <li>OS2.EXE - A win32 application that does the interaction of the OS/2 apps 
    with the desktop.</li>
  <li>Core DLLs - These DLLs that make OS/2 programs interface with the kernel/sub 
    system (i.E. DOSCALLS.DLL). </li>
  <li>Additional DLLs - DLLs that provide additional APIs for OS/2 apps. This 
    includes Presentation Manager.</li>
</ul>
<h2><font color="#009966">Current state</font></h2>
<p>Up to now just a fragment of DOSCALLS.DLL exists. The biggest problem are the 
  os2 API headers which are (C) by IBM. So help is still welcome.</p>
<h2><font color="#009966">16-Bit issues</font></h2>
<p>It is not intended to support 16-bit OS/2 applications. This would make the 
  system inconsistent and produce much more work that use. But there is still 
  one issue: Current textmode applications are either 16-bit or use thunking to 
  call the 16-bit APIs. These 32-Bit thunking applications have to be supported. 
  We are still thinking how to accomplish that. </p>
<h2><font color="#009966">32-Bit issues</font></h2>
<p>It is planned to replace the current MOU- KBD- MSG- and VIO- subsystems with 
  the <a href="http://homepages.tesco.net/%7EJ.deBoynePollard/Softwares/conapi.html">Unicode 
  Console API</a>. This is also the foundation for other platforms we want to 
  provide source code compatibility with. So nearly every 32-Bit processor can 
  be supported. It sould even be possible to implement a 64-bit OS/2 API.</p>
<h2><font color="#009966">Architecture</font></h2>
<p>To understand the architecture of ReactOS or WinNT read a book from the &quot;Inside 
  Windows NT&quot;-series. The architecture of ROS/2 is like every normal subsystem. 
  When OS2SS.EXE starts, it creates an object directory named os2 and therein 
  it creates a port object with the name Os2API. A port is something like a socket. 
  Two programs can comunicate with each other via a port. The port Os2API provides 
  the LPC API of the OS2SS.EXE - the actual subsystem. <br>
  Every OS/2 program that is loaded, is linked with DOSCALLS.DLL and NTDLL.DLL 
  - the interface to the NT-kernel. Since DOSCALLS is implemented using NTDLL.DLL, 
  every OS/2 app has it in its adress space. Many functions in DOSCALLS.DLL are 
  implemented by just wrapping NTDLL.DLL functions. Some functions however need 
  assistance by the subsystem. For this reason the app makes an LPC to OS2SS.EXE. 
  LPC means local procedure call and it is a very fast version of RPC. Together 
  with the first application also OS2.EXE starts up. OS2.EXE runs in the win32 
  subsystem with the security of the current user. OS2.EXE is used to gather keyboard 
  and mouse input and to show console windows and PM-windows of all OS/2 programms 
  of the current user. In order to accomplish this OS2.EXE creates a port object 
  in the os2 object directory named Os2Interact. OS/2 applications have a connection 
  to OS2.EXE, too. OS2SS.EXE and OS2.EXE also talk to each other. An OS/2 application 
  then makes LPCs either to OS2.EXE directly or if required via OS2SS.EXE.</p>
<p>Details</p>
<p>&nbsp;</p>
<p>LPC Documentation</p>
</body>
</html>