Sponsored by the OS/2 Supersite
 

The Win32-OS/2 Project

Web page by Timur Tabi 
Last Updated: March 16, 1998 
Mirror sites: 
http://www.maschek.com/win32-os2 (Germany) 
http://win32os2.home.pages.de (Germany) 
http://www.sdg.ml.org/win32os2/ (Sweden) 

Support OS/2

Get a bumper sticker!

This web page has moved!! The new URL is http://www.os2ss.com/win32-os2/. Please update your bookmarks.


Save yourself time and trouble!  Avoid having to ask dumb questions!  Keep up-to-date on the latest beta version!  Click on this button, and you'll get email whenever this web page changes.

Note to current URL-Minder users: YOU ARE NOT GETTING FALSE UPDATE NOTICES.  I occasionally make very minor updates to this page without changing the date on the top.


Introduction

The Win32-OS/2 Project is a collection of tools and DLL's that allow an end user to convert a Win32 (i.e. Win95/WinNT) program into a native OS/2 program, and then run that program under OS/2 without needing Windows or Win-OS/2 support installed.

If you don't know what OS/2 is, or if you would just like more information on OS/2, please check out my New OS/2 User Web Page.

This software is available for free to all users.

There is also a transcript from a V.O.I.C.E. IRC question-and-answer chat session with Peter Fitzsimmons and Timur Tabi.  A lot of frequently asked questions were posted and answered during this session, so you may find answers to your questions there.  The transcript was edited by Chris Wenham of OS/2 e-Zine.

The was another V.O.I.C.E. IRC question-and-answer session with Peter, Sander, and Timur on Monday, March 9th.


We need your help!  UPDATED!

PLEASE READ THIS CAREFULLY

1. Please download the current release before doing anything else.  Try the converter yourself first.  If it doesn't work, then we can talk. Do not email us your results.  Read the section titled "How to report bugs" to learn what to do next.

2. Don't tell us about software we can download ourselves.  We're only interested in commercial software that has to be purchased.

3. Don't ask us what software we want - that's completely missing the point.  The idea is for YOU to send US software that YOU want to have converted.  Look at the Win95/NT software that YOU NEED TO USE under OS/2, and pick from that list.  We don't want suggestions.  We don't want advice.

4. 99% of all Windows 95/NT software WILL NOT WORK.  In fact, the majority of the small apps that come with Windows 95/NT will not work either.  And not only that, but of all the apps that do work, 99% of them already have native OS/2 equivalents that work better.  So why are you wasting your time converting Notepad or Calc?

5. Because the converter is so immature, we ask that you wait until the public releases can convert your app so that it runs at least part-way.  It is way to early for us to consider the average Win32 application.  We will be releasing updates about once a month - eventually your application will work, to some extent.  Until then, please do not make any offers.

6. DO NOT EMAIL US ANY SOFTWARE.

We are accepting donations of Windows 95/NT software. Our intention is that you purchase an application and have it shipped to us. We need to have a full blown legal copy of the application, because we will need all manuals and we may also need to contact the vendor's technical support. Without a full legal copy of the application, we will not have all the resources we need to convert it.

IMPORTANT NOTE: We make no guarantees whatsoever that we will be able to convert your application. All we are offering is to include your application in our test suite. We will be aware of the problems, but we make no promises that we will be able to fix them. Our goal is to be able to convert every Windows 95/NT application, but there are limits, and we know that there are some Windows 95/NT applications that we will never be able to convert.

The team member who will accept your donation will depend on what kind of application and where you live. First determine if any of the team members is working on the appropriate area. If no one qualifies, then send it to the nearest team member.
 
Team Member Category of Application or Location
Joel Troster All MIDI applications.
Sander van Leeuwen Any general apps from those in Europe, and any Glide-based games (no D3D!) from anywhere
Kevin Laughbaum All OpenGL applications
Chris McKillop Any general apps from those in Canada, and the US if Timur gets overloaded.
Timur Tabi Any general apps from those in the United States
Felix Maschek Any communications (serial I/O) apps from those in Europe
For email addresses, please see the bottom of this web page, and contact the team member directly. Please note that we will NOT be able to return your software back to you.
 
Submitted Software  Team Member Status
Finale 97 (Coda Music Technology) Joel Troster being tested
Cakewalk 5 (Cakewalk) Joel Troster offered, not yet submitted
Mathcad 7 (Mathsoft) Timur Tabi offered, not yet submitted
Grapher for Windows (Golden Software) Timur Tabi offered, not yet submitted
Surfer for Windows (Golden Software) Timur Tabi offered, not yet submitted


Download the current release!  UPDATED!

The file is distributed as WIN32OS2.ZIP.  If you don't know how to deal with ZIP files, then you won't be able to figure out how to convert Win32 apps, so we're not going to bother making an installation program - you'll have to do things the hard way for now.  It is a generic converter, intended to work on any Win32 application.  It also contains instructions and batch files for converting the game Quake II from Id Software.  You can download it from:

How do I use this thing?  UPDATED!

Read the instructions that come in the zip file.

Once you have converted all of your .EXE's and DLL's with pe2lx, all you need to do is run them under OS/2.  Since you need Open32 for this to work, you must have OS/2 Warp 4, or Warp 3 with at least FixPack 26 applied.  Also, if you have applied Warp 4 FixPack 3, you must either apply the os2krnl fix on top of that, or apply FixPack 4 or later.  Also, there seems to be some debate as to whether Warp Server Advanced SMP can be used, as some have reported that the Warp Server/Warp 3 FixPacks do not add Open32 support to Warp Server, yet others say that the support can be manually added.

You will need to install the application under a real copy of Windows 95 or NT, and you can only run the converter under OS/2.  This means that you will need to have Windows 95/NT and OS/2 installed on the same machine, and that you will need to be able to access your Windows 95/NT partition from your OS/2 partition.  In order to do this, you will need an OS/2 IFS driver that will allow OS/2 to properly read from the Windows 95/NT partition.  You can look in the /pub/os2/system/drivers/filesys directory on hobbes to find IFS drivers for VFAT and NTFS.


How to report bugs  UPDATED!

First, check the Win32-OS/2 Application Compatibility Resource web page.  If your bug is listed there, then don't do anything.  Just wait until we fix it.  Otherwise, reported it to the comp.os.os2.bugs newsgroup.  Do not send email to the developers!  And do not cross-post to other newsgroups - keep it within c.o.o.bugs. Get confirmation if you can.  After you're sure that it's really a bug, go back to the Win32-OS/2 Application Compatibility Resource web page and add your bug to the list.

But before you post .... scan the newsgroup to see if your bug or question has already been posted.  Even better, use Deja News to search the comp.os.os2.bugs newsgroup.  Click here to start a search on DejaNews of the comp.os.os2.bugs newsgroup.  Not only is this proper etiquette, but it keeps you from looking like an idiot.


Current list of known bugs  UPDATED!

If you are experiencing some problems that are explained on this list, do not bother telling anyone about it.  You'll just have to wait until we fix it.

You can also check out Win32-OS/2 Application Compatibility Resource web page. This page is NOT maintained by any of us - it is completely independent so we do not claim any responsibility for its content. However, it is usually a better bug list than this page.

On a side note, the fact that pe2lx.exe works is usually not of any value. All the conversion process does is to create an OS/2 EXE.  The real trick is in loading the EXE into memory and getting it work.  There are only three cases when pe2lx.exe will not work:

This list will only cover generic bugs, not bugs that are specific to a certain application.
Known bug Current Status or Comments
pe2lx can't convert EXE's generated with a Borland compiler (or something like that). We'll fix this soon or later
SYS2070 or SYS0127 when trying to run a converted EXE This means that the EXE is trying to use a function in one of the supplemental DLL's that is not yet implemented.

List of Converted Apps  UPDATED!

Here's a list of apps that we KNOW that we can convert or not convert - this is not a comprehensive list by any means. Do not ask us if we've tried such-and-such app.
 
Applications that we know work 
 
Application Comments
Quake II Yes (including sound). Full screen on a 3Dfx Voodoo card (same speed as in NT), and Windowed (software rendering) on any system (slower than in NT) - see screen shot
GLide (VooDoo 3D Library) Yes, including most demos from 3Dfx's web site
Freecell, Reversi, Notepad Convert just fine, although some run better than others. For some apps, only the Win95 version will work, for others only the WinNT version will work. See screen shot
Windows Calculator Works almost - no borders, difficult to close
Freecell Only the version from Win32s 1.25 (whatever that means) appears to work, although there are some color problems
Solitaire Only the version on NT SP3 appears to work
GDI demo Converts just fine - see screen shot
Rasmol Freeware molecule viewer - converts just fine.  See http://klaatu.oit.umass.edu/microbio/rasmol/
MFC Samples Some of the simple MFC samples
Tealpaint database Reported to work fine
WinHelp 32 4.10.1691 Works on some help files, not all
I have removed the list of apps that do not work because it is not interesting information.  99% of all Win32 apps do not work, so there's no point in maintaining a list on the subject. When the converter matures to the point where the average Win32 app will work, then I'll bring the list back.


Status  UPDATED!

The March 1998 release is now available.

There are three prime areas of current development:

Resources.  Resources are GUI items like icons, menus, translatable strings, etc.  They are stored inside the .EXE or .DLL.  Open32 requires that all resources be in OS/2 format, so pe2lx must also translate the resources from Windows format to OS/2 format.
 
Resource Type Status
bit maps working
accelerators working
cursors working
menus working
dialog boxes working
icons working
strings Win32 supports numeric and text string ID's, whereas OS/2 supports only numeric ID's, so a stub function in kernel32.dll does the translation.
version version.dll is needed to read these resources, but it's not implemented yet.  Fortunately, very few apps use this resource
 
Updating the Supplemental DLL's.  Currently, there is support for over 1,750 Win32 API's (including OLE), of which 750 are fully implemented via Open32, and the remaining 1000 are provided in supplemental DLL's, of which 500 are currently stubs that do nothing.
 
DLL Name Purpose/Function Status
advapi32 Registry and security apis (among others) Approx. 20% (most of the registry API's).  The other 80% is for the NT security API's, which will not be supported. 
gdi32 All the GDI (graphics) API's 77%
kernel32 Kernel apis (file system, memory, threads, events, etc.) and console API's 60% complete. Console API's are now available. UPDATED!
ole32 OLE and OLE2 All stubs - just enough functionality to get an app thinking that OLE is available (needed for some apps).
user32 Window apis (create/manipulate windows, dialogs, menus, etc.) 72%
shell32 GUI extensions, drag 'n drop, shell extensions in Win95/NT, all sorts of weird things like loading resources from other exes/dlls. Less than 5%
version Versioning API. (used to extract info from the version resource most win32 exe's contain) All stubs
winmm Multimedia API's 50%. Wave-out is working. Wave-In, Mixer, and MIDI Mapper are all stubs. MIDI In/Out is partially available only on Warp 4 with RTMIDI. midiStream is not done. Aux is 90% complete.  UPDATED!
ddraw DirectDraw 25%. Partially implemented - enough to run a DirectX SDK animated donut sample.
comctl32 Common GUI controls, like buttons, toolbar, image lists, notebooks, etc. This DLL must be converted by you.  The version that comes with Win95 does not work, but the updated version from Microsoft does.  Please use this version instead.
comdlg Common dialog boxes (file open/save, print, palette, find, etc.) Completely implemented using Open32.
dsound DirectSound All stubs
winspool Called winspool.drv in real Windows. Only one function is implemented
winsock TCP/IP sockets support 90%. 6 more functions until 1.1 compatitble, 2.0 support is next  UPDATED!
capi2032 CAPI 2.0 ISDN API 100%.
tapi32 Telephony API All stubs.
mpr Network stuff All stubs.
netapi Network stuff All stubs.
opengl32 OpenGL API 80% stubs, 15% fully implemented, 5% not yet implemented
A bunch of text files that show each of the DLL's, the functions in them, which ones have been implemented, and other goodies can be found in this directory.

In particular:


Implementation Notes

Just a few random notes about the implementation of pe2lx and the supplemental DLL's


Frequently Asked Questions

What's the difference between Win32, Win95, and WinNT?

Windows 95 (Win95) and Windows NT (WinNT) are two different operating systems sold by Microsoft.  These are products that you can purchase and install on your computer, and they allow you to use a wide variety of applications. An operating system is the layer between the applications you use and the computer hardware.  The choice of operating system dictates everything about your computer: which hardware you can use, which software you can run, how they will look, and how well your computer performs as a whole.

Win32 is the name of an API (Application Programming Interface) that both Win95 and WinNT support.  API's are used by programmers.  An API is a collection of services that an operating system provides for applications to use.  Most applications are written to a specific API for a specific operating system.  Since both Win95 and WinNT support the Win32 API (with minor differences), it's very easy to write an application that works on both Win95 and WinNT at the same time.  An application which runs on Win95 and WinNT is called a Win32 application.

What is Open32?

With OS/2 Warp 4, IBM tried to make it easy for developers to port (convert) their Windows applications to OS/2 by providing the Win32 API in addition to the standard OS/2 API.  The idea was that a developer could take his Windows program and just recompile it (perhaps after some minor changes) with a standard OS/2 compiler.  The program, when run under OS/2, would look more or less like a normal OS/2 application.

The name given for the Win32 API as implemented under OS/2 is Open32.  Open32 is not the complete Win32 API - many functions are missing. The biggest software vendor who uses Open32 is Lotus - all of their new OS/2 applications use the Open32 API extensively.

What's Win32s?

Win32s is a subset of Win32 (a different subset than Open32) specifically for Windows 3.1.  As you may know, Windows 3.1 is basically a 16-bit operating system, but with the help of Win32s, it's possible to write 32-bit applications that run on Windows 3.1.  They don't run as well as they would on Windows 95/NT, but they do run, and they are better than the standard 16-bit applications.  Many developers use Win32s to provide the same application on Windows 3.1 and Windows 95/NT.

There are several versions of Win32s.  The most recent is version 1.30.  Unfortunately, Win-OS/2 only supports Win32s 1.25.  This means that there are a number of Windows 3.1 applications which will not work under OS/2 simply because they need a higher level of Win32s.

Can I convert 16-bit Windows 3.1 applications?

No. Windows 3.1 16-bit applications (a.k.a. Win16 apps) will not be supported.  After all, that's why OS/2 has Win-OS/2.  However, a large number of Windows 3.1 apps are actually Win32s apps.  We've found that we can convert and run Win32s apps, so they will be supported.  However, Win32s support is not a priority for us, since many Win32s apps are already available as true Win32 apps.

What about the legal issues?

Won't Microsoft try to stop us? Well, this software is not doing anything different from what the operating system has to do to load your program into memory.  Besides, it certainly is no more illegal than the fact that IBM provides the Win32 API in OS/2, or that the Linux community is providing a Win32 emulator in the form of WINE.  In other words, this project is perfectly legal.  However, some companies may require by their license that you run their apps only under Microsoft Windows, although many people have said that such a requirement is illegal in most places.  But that's not our problem, because that would be like convicting a gun manufacturer if someone uses one of their weapons to kill a person.


Screen Shots

Click on the thumbnails to see the full-size picture.

Screen Shot #1Solitaire and GDI demo (1024 x 768 x 256)

Screen Shot #2Quake II (1024 x 768 x 256)


PE2LX - The EXE/DLL file translator

Pe2lx is the name given to the tool which converts your Win32 EXE's and DLL's into native OS/2 EXE's and DLL's.  Pe2lx stands for Portable Executable To Linear Executable converter.  PE is Win32's executable (.EXE and .DLL) format, and LX is OS/2's.  To see a description of the LX format, take a look at omf.inf.

Some key differences are:

The conversion process consists of: The result is a new set of .EXE's and .DLL's.  These are the converted executables.

Supplemental DLL's - Filling the holes in Open32

As mentioned earlier, the Open32 API is not the complete Win32 API set.  Far from it, actually, so the Win32-OS/2 project has to fill in those gaps by itself.

To do this, supplemental DLL's are provided.  These DLL's contain not only those API functions that are not in Open32, but they can also contain replacements for those functions that are in Open32 but do not work correctly.

In addition, these DLL's can also contain pre-processing for some Open32 API's.  For instance, a particular Open32 API could perhaps implement only a portion of the functionality of its Win32 counterpart. The stub function in the supplemental DLL could perform the missing task and then call upon the Open32 DLL to handle the rest.

The stub functions in the supplemental DLL's all have a prefix of "OS2" (although they are not exported as such).  The reason for this is that the converted EXE must link not only to all of the supplemental DLL's, but also to the Open32 DLL (PMWINX.DLL), because PMWINX.DLL does most of the real work (after all, it is an implementation of the Win32 API).  All functions must have unique names, so if PMWINX.DLL has a function called "ReadFile", there cannot be a function with that same name in the any of the supplemental DLL's, because then OS/2 wouldn't know which version to use when the application calls "ReadFile".  So when pe2lx converts the EXE to OS/2 format, it also changes all of the API names.  "ReadFile" becomes "OS2ReadFile".

There are three different categories of Open32 API's:


Who's on the Project  UPDATED!

A list of all the project team members and their assignments.
 
Name Location Email Address Accomplishments and Current/Future Work
Timur Tabi Austin, TX timur@io.com Maintainer of web site.  Spoke at Warpstock.
Jochen Schaeuble Germany jochen@Herrenberg.netsurf.de Maintainer of mirror-web site
Sander van Leeuwen Delft, the Netherlands sandervl@xs4all.nl Almost everything (pe2lx + dll's)
Peter Fitzsimmons Mississauga, Ontario, Canada pfitz@ican.net API utilities, development environment and help with pe2lx, user32, kernel32.
Christophe M. Vallat miodrag@mygale.org Registry API's.
Saxon Joseph Hyde Jones saxon@gpu.srv.ualberta.ca temporarily unavailable
Vince Vielhaber Oxford, MI vev@michvhf.com Winsock
Kevin Laughbaum Houston, TX klaughbaum@utsi.com  OpenGL
Chris McKillop Waterloo, Ontario, Canada cdmckill@engmail.uwaterloo.ca Build environment
Joel Troster Ontario, Canada jtroster@ibm.net MIDI support
Patrick Haller Germany haller@zebra.fh-weingarten.de Console API's
Felix Maschek Ammersbek, Germany felix@maschek.com Serial I/O, maintainer of mirror-web site

Back to Timur's homepage

LinkExchange
LinkExchange Member