Difference between revisions of "Arwinss"

From ReactOS Wiki
Jump to: navigation, search
m (CORE-9984 fixed)
 
(79 intermediate revisions by 15 users not shown)
Line 1: Line 1:
 +
{{outdated}}
 
'''Arwinss''' is an alternative implementation of the core Win32 subsystem components. Technical information about implementation details is available at this page: [[Arwinss technical]].
 
'''Arwinss''' is an alternative implementation of the core Win32 subsystem components. Technical information about implementation details is available at this page: [[Arwinss technical]].
  
 
== Usage ==
 
== Usage ==
  
Checkout the arwinss branch ({{Svn-server}}reactos/branches/arwinss/reactos), and compile using following command:
+
Before continuing, I'd recommend a separate build folder for building Arwinss. Otherwise you'll have to revert the Arwinss changes and rebuild ReactOS.
makex comctl32 user32 gdi32 win32k winent win32csr freetype kernel32 explorer winlogon
 
  
This will build all needed modules of a new subsystem, which you need to copy over to the installed ReactOS version (see [[Transfer files from the host OS to the virtual drive]]). A modified KERNEL32.DLL is needed only for a compatible global atoms support.
+
Checkout the arwinss branch (svn://svn.reactos.org/reactos/branches/arwinss), into a folder that can really be anywhere. Copy the arwinss folder and trunk.diff into your dedicated build folder. Apply trunk.diff and hope that it applies with no problem (if it doesn't, watch this page for an updated patch). Afterwards, you can compile using the normal build commands:
 +
ninja
 +
ninja bootcd
 +
ninja livecd
 +
ninja hybridcd
  
If you want to build winex11 module, you need to firstly copy <tt>lib/3rdparty/libX11/libX11.a</tt> file from your working copy to the <tt>obj-i386/lib/3rdparty/libX11</tt> directory (creating it if it does not exist). This will fix the winex11.drv linking issues, and you can just type
+
This will build a copy of trunk with the alternate subsystem enabled.
  makex winex11
+
 
 +
If you want to build the winex11 module, you must first copy the <tt>lib/3rdparty/libX11/libX11.a</tt> file from your working copy to the <tt>obj-i386/lib/3rdparty/libX11</tt> directory (creating it if it does not exist). This will fix the winex11.drv linking issues, and you can just type
 +
  ninja winex11
 
to build this optional module.
 
to build this optional module.
  
 
== Architecture ==
 
== Architecture ==
  
Arwinss uses parts of the Wine architecture and parts of Windows NT architecture in appropriate places and in a good way.The overall call flow / architecture of [[Arwinss]] looks like this:
+
Arwinss uses parts of the Wine architecture and parts of Windows NT architecture in appropriate places and in a good way. The overall call flow / architecture of [[Arwinss]] looks like this:
 
 
[[Image:arwinss.png]]
 
  
 +
[[File:arwinss.png]]
  
 
It consists of the following modules, one of them being optional (winex11.drv):
 
It consists of the following modules, one of them being optional (winex11.drv):
* <tt>dll/3rdparty/freetype</tt> - implements usermode font rendering (FreeType library, with small ReactOS glue), used by GDI32.DLL
+
* <tt>arwinss/freetype</tt> implements usermode font rendering (FreeType library, with small ReactOS glue), used by GDI32.DLL
* <tt>dll/win32/user32</tt> - implements USER API
+
* <tt>arwinss/client/user32</tt> implements USER API
* <tt>dll/win32/gdi32</tt> - implements GDI API
+
* <tt>arwinss/client/gdi32</tt> implements GDI API
* <tt>dll/win32/winent.drv</tt> - implements native graphics and user drivers
+
* <tt>arwinss/client/winent.drv/winent.drv</tt> implements native graphics and user drivers
* <tt>dll/win32/winex11.drv</tt> - implements X11 X-windows graphics and user drivers
+
* <tt>arwinss/client/winex11.drv/</tt> implements X11 X-windows graphics and user drivers
* <tt>subsystems/win32/win32k</tt> - implements kernel mode counter part of the native graphics driver, a Simple Window Manager (SWM) and a kernel mode USER server.
+
* <tt>win32ss</tt> implements kernel mode counter part of the native graphics driver, a Simple Window Manager (SWM) and a kernel mode USER server.
* <tt>subsystems/win32/csrss/win32csr</tt> - implements needed parts of the CSR subsystem along with handling user input
+
* <tt>win32csr</tt> implements needed parts of the CSR subsystem along with handling user input
  
 
== Hacking ==
 
== Hacking ==
Line 37: Line 42:
 
== Potential Benefits ==
 
== Potential Benefits ==
 
These bugs would be fixed if Arwinss was ready (just a short list):
 
These bugs would be fixed if Arwinss was ready (just a short list):
* {{bug|933}} "OO.114 - Installation wizard with blank text"
+
 
* {{bug|1175}} "listbox does not hide scrollbars in listbox"
+
{{REACTOSBUG|1101}}
* {{bug|1239}} "Winamp's Main Window Unclickable"
+
 
* {{bug|1546}} "Two carets on the screen at one with two edit areas opened"
+
{{REACTOSBUG|9612}}
* {{bug|1776}} "Microsoft remote desktop client can't connect, computername can't be entered"
+
 
* {{bug|2393}} "Firefox 1.5 Download, you need move the mouse."
+
<del>{{REACTOSBUG|9984}}</del>
* {{bug|2769}} "Redraw bug using ShowWindow for a child window of a dialog"
 
* {{bug|2788}} "Wrong right click behaviour - unwanted multiple selection"
 
* {{bug|2835}} "Opera 9.64: Unable to locate timer in message queue for W..."
 
* {{bug|3500}} "Charmap redrawing bug"
 
* {{bug|3542}} "background image is clipped in some installers (abiword) in first page"
 
* {{bug|3893}} "Properties for Date/Time: mouse pointer disappears"
 
* {{bug|3966}} "can't hit enter on a selected item to open it"
 
* {{bug|4443}} "Firefox 3 - Can't scroll page with mouse wheel."
 
* {{bug|4501}} "When closing one window, Firefox gets restored if it was minimized"
 
* {{bug|4612}} "tn5250: can't move window"
 
* {{bug|4779}} "K-Meleon popup menus don't work"
 
* {{bug|4915}} "Control panel: Keyboard doesn't work after opening and closing an applet"
 
* {{bug|5069}} "JPEG artifacts in installers"
 
* {{bug|5305}} "Notepad: Highlighted text invisible"
 
  
 
As one can see from these bug titles it mainly boils down to drastically improved user32 and gdi32 support.
 
As one can see from these bug titles it mainly boils down to drastically improved user32 and gdi32 support.
  
== TODO ==
+
== TODO list ==
 +
 
 +
1. <del>Fix redrawing issues {{ARWINSSBUG|19}} and {{ARWINSSBUG|26}}</del>
 +
 
 +
2. <del>Fix crash that prevents booting in VirtualBox</del>
  
See ReactOS Bugzilla (component  [http://www.reactos.org/bugzilla/buglist.cgi?component=Arwinss "Arwinss"])
+
3. <del>Fix installer/uninstaller crash {{ARWINSSBUG|75}}</del>
  
# Enable commented out places in the font output code (ET_OPAQUE, etc)
+
4. Fix garbage on desktop after closing some apps {{ARWINSSBUG|63}}
# Explorer taskbar does not appear automatically
+
 
# Taskbar doesn't show any proccess
+
5. <del>Fix zoom and tabs in Firefox {{ARWINSSBUG|76}}</del>
# Implement support for multiple desktops
+
 
# Implement hotkeys support
+
6. Fix "Window titles are shown as inactive (gray) while being active" {{ARWINSSBUG|7}}
 +
 
 +
7. <del>Fix arwinss related program crashes {{ARWINSSBUG|73}})</del>
 +
 
 +
8. <del>Fix font mapping {{ARWINSSBUG|57}})</del>
 +
 
 +
9. Fix interaction of windows in apps with few windows {{ARWINSSBUG|32}}
 +
 
 +
10. Fix low level input hooks (used for example in DosBox)
 +
 
 +
== Unimplemented/Fixme that appear during work ==
 +
 
 +
1. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:665) RosDrv_SetWindowStyle is UNIMPLEMENTED!
 +
 
 +
2. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:642) RosDrv_SetWindowIcon is UNIMPLEMENTED!
 +
 
 +
3. (subsystems\win32\win32k_arwinss\wine\queue.c:814) TODO: Check if anyone is waiting on queue is missing!
 +
 
 +
4. (subsystems\win32\win32k_arwinss\eng\device.c:927) FIXME: DeviceName is NULL, trying display nr. 1 (TuxRacer)
 +
 
 +
5. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:636) RosDrv_SetWindowRgn is UNIMPLEMENTED! (Reget)
 +
 
 +
6. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:626) RosDrv_SetLayeredWindowAttributes is UNIMPLEMENTED! (Qutim)
 +
 
 +
7. err:(dll\win32\arwinss\winent.drv\gdidrv.c:353) ExtEscape for escape 8 is unimplemented! (SuperTux 0.3.3; ROS text screensaver)
 +
 
 +
8. fixme:(dll\win32\arwinss\winent.drv\clipboard.c:2440) NTDRV_CLIPBOARD_IsSelectionOwner is UNIMPLEMENTED! (AbiWord. Notepad++)
 +
 
 +
9. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:451) RosDrv_GetTextExtentExPoint is UNIMPLEMENTED!
 +
 
 +
10. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:609) RosDrv_RealizePalette is UNIMPLEMENTED!
 +
 
 +
11. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:959) RosDrv_UnrealizePalette is UNIMPLEMENTED!
 +
 
 +
12. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:433) RosDrv_GetNearestColor is UNIMPLEMENTED!
  
 
== Testing ==
 
== Testing ==
  
You can get the lastest ARWINSS ISO in the first message of [http://www.reactos.org/forum/viewtopic.php?f=2&t=8004 this thread] or [http://arwinss.com/builds/ here].
+
You can get the latest ARWINSS ISO [https://sourceforge.net/projects/reactos/files/Arwinss/ here].
 +
 
 +
<gallery>
 +
File:Roslogon2.jpg|Arwinss running in Windows 2003 and connecting to X Windows server on the host Windows 7.
 +
</gallery>
 +
 
 +
== See Also ==
 +
*[https://reactos.org/wiki/images/8/80/Arwinss.pdf Arwinss PDF]
 +
 
 +
[[Category:Branches]]

Latest revision as of 11:27, 12 July 2018

This page is probably outdated

The information on this page might not be valid for the current state of ReactOS.
A Wiki Administrator should look at this page and decide or discuss what to do with it.


Arwinss is an alternative implementation of the core Win32 subsystem components. Technical information about implementation details is available at this page: Arwinss technical.

Usage

Before continuing, I'd recommend a separate build folder for building Arwinss. Otherwise you'll have to revert the Arwinss changes and rebuild ReactOS.

Checkout the arwinss branch (svn://svn.reactos.org/reactos/branches/arwinss), into a folder that can really be anywhere. Copy the arwinss folder and trunk.diff into your dedicated build folder. Apply trunk.diff and hope that it applies with no problem (if it doesn't, watch this page for an updated patch). Afterwards, you can compile using the normal build commands:

ninja
ninja bootcd
ninja livecd
ninja hybridcd

This will build a copy of trunk with the alternate subsystem enabled.

If you want to build the winex11 module, you must first copy the lib/3rdparty/libX11/libX11.a file from your working copy to the obj-i386/lib/3rdparty/libX11 directory (creating it if it does not exist). This will fix the winex11.drv linking issues, and you can just type

ninja winex11

to build this optional module.

Architecture

Arwinss uses parts of the Wine architecture and parts of Windows NT architecture in appropriate places and in a good way. The overall call flow / architecture of Arwinss looks like this:

Arwinss.png

It consists of the following modules, one of them being optional (winex11.drv):

  • arwinss/freetype – implements usermode font rendering (FreeType library, with small ReactOS glue), used by GDI32.DLL
  • arwinss/client/user32 – implements USER API
  • arwinss/client/gdi32 – implements GDI API
  • arwinss/client/winent.drv/winent.drv – implements native graphics and user drivers
  • arwinss/client/winex11.drv/ – implements X11 X-windows graphics and user drivers
  • win32ss – implements kernel mode counter part of the native graphics driver, a Simple Window Manager (SWM) and a kernel mode USER server.
  • win32csr – implements needed parts of the CSR subsystem along with handling user input

Hacking

Most of the hacking happens in WINENT.DRV and WIN32K.SYS, with very rare fixes to the user32/gdi32 (mainly, because it's a tested Wine's code with only minor changes).

Convention for marking changes. C++ code comments (//) mean that the place has some special mark up for debugging. A typical use is for a

// FIXME: Something

Potential Benefits

These bugs would be fixed if Arwinss was ready (just a short list):

CORE-1101

CORE-9612

CORE-9984

As one can see from these bug titles it mainly boils down to drastically improved user32 and gdi32 support.

TODO list

1. Fix redrawing issues (see bug #19) and (see bug #26)

2. Fix crash that prevents booting in VirtualBox

3. Fix installer/uninstaller crash (see bug #75)

4. Fix garbage on desktop after closing some apps (see bug #63)

5. Fix zoom and tabs in Firefox (see bug #76)

6. Fix "Window titles are shown as inactive (gray) while being active" (see bug #7)

7. Fix arwinss related program crashes (see bug #73))

8. Fix font mapping (see bug #57))

9. Fix interaction of windows in apps with few windows (see bug #32)

10. Fix low level input hooks (used for example in DosBox)

Unimplemented/Fixme that appear during work

1. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:665) RosDrv_SetWindowStyle is UNIMPLEMENTED!

2. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:642) RosDrv_SetWindowIcon is UNIMPLEMENTED!

3. (subsystems\win32\win32k_arwinss\wine\queue.c:814) TODO: Check if anyone is waiting on queue is missing!

4. (subsystems\win32\win32k_arwinss\eng\device.c:927) FIXME: DeviceName is NULL, trying display nr. 1 (TuxRacer)

5. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:636) RosDrv_SetWindowRgn is UNIMPLEMENTED! (Reget)

6. fixme:(dll\win32\arwinss\winent.drv\userdrv.c:626) RosDrv_SetLayeredWindowAttributes is UNIMPLEMENTED! (Qutim)

7. err:(dll\win32\arwinss\winent.drv\gdidrv.c:353) ExtEscape for escape 8 is unimplemented! (SuperTux 0.3.3; ROS text screensaver)

8. fixme:(dll\win32\arwinss\winent.drv\clipboard.c:2440) NTDRV_CLIPBOARD_IsSelectionOwner is UNIMPLEMENTED! (AbiWord. Notepad++)

9. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:451) RosDrv_GetTextExtentExPoint is UNIMPLEMENTED!

10. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:609) RosDrv_RealizePalette is UNIMPLEMENTED!

11. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:959) RosDrv_UnrealizePalette is UNIMPLEMENTED!

12. fixme:(dll\win32\arwinss\winent.drv\gdidrv.c:433) RosDrv_GetNearestColor is UNIMPLEMENTED!

Testing

You can get the latest ARWINSS ISO here.

See Also