Any programmer even passingly familiar with the Windows and Presentation Manager APIs is aware that there are significant similarities. When other windowing APIs, such as X11 or Mac OS, are taken into consideration, Windows and the Presentation Manager look like siblings, almost twins.
The similarity is not coincidental. The OS/2 GUI was even referred to as the “Windows Presentation Manager” in the early days of OS/2. The OS/2 Presentation Manager and Windows 2.0 were developed in parallel, and Microsoft was stressing the similarities.
The exact timeline is not easy to establish, but a few points are clear. The Presentation Manager was announced in April 1987; at that time, the functional specification already existed, but the code was very far from being finished. In mid-1987, when Microsoft started shipping the first OS/2 SDKs, the complete Presentation Manager API documentation was part of the kits, even though there was no code yet. To get developers started, the OS/2 SDK included Windows 1.04 and the corresponding SDK.
In late 1987, Microsoft shipped Windows 2.0. An update to the OS/2 SDK included Windows 2.03 (the only known release of Windows 2.0) together with the Windows SDK. The idea was that developers could start designing and writing GUI applications before Presentation Manager was available.
In March 1988, the first OS/2 SDK with a beta version of the Presentation Manager finally appeared. The early Presentation Manager version looked a lot like Windows 2.0 (including the ugly color scheme). The programming documentation included a “Windows Equivalents” section listing each Windows API and its Presentation Manager equivalents (or lack thereof, in some cases). OS/2 1.1 with Presentation Manager was released in late 1988, visually somewhat different from Windows 2.0 but by no means a radical departure.
Over the years, both the Presentation Manager and Windows APIs evolved, but the basic structure of windows and messages has not changed. Many of the differences between Windows and the Presentation Manager were caused by different objectives: Windows 2.0 was to be backwards compatible with Windows 1.0, and therefore existing APIs changed very little. On the other hand, Presentation Manager was a clean slate and Microsoft took it as an opportunity to clean up and improve the API design.
For example, the Windows APIs TranslateMessage and DispatchMessage, standard components of a message loop, were combined into WinDispatchMsg in Presentation Manager. In Windows, the TranslateMessage calls were effectively mandatory, and there was no real need for a separate function call. And in PresentationManager, all windowing functions received the ‘Win’ prefix to make it much clearer what was what.
As a result, Presentation Manager and Windows applications shared the same design philosophy and overall structure, but ended up being quite different in detail.