HOME

TheInfoList



OR:

The Microsoft Layer for Unicode (MSLU) is a
software library In computer science, a library is a collection of non-volatile resources used by computer programs, often for software development. These may include configuration data, documentation, help data, message templates, pre-written code and subr ...
for legacy versions of Windows, simplifying the creation of Unicode-aware programs on
Windows 9x Windows 9x is a generic term referring to a series of Microsoft Windows computer operating systems produced from 1995 to 2000, which were based on the Windows 95 kernel and its underlying foundation of MS-DOS, both of which were updated in subs ...
(
Windows 95 Windows 95 is a consumer-oriented operating system developed by Microsoft as part of its Windows 9x family of operating systems. The first operating system in the 9x family, it is the successor to Windows 3.1x, and was released to manufacturi ...
,
Windows 98 Windows 98 is a consumer-oriented operating system developed by Microsoft as part of its Windows 9x family of Microsoft Windows operating systems. The second operating system in the 9x line, it is the successor to Windows 95, and was released t ...
, and
Windows Me Windows Millennium Edition, or Windows Me (marketed with the pronunciation of the pronoun "me"), is an operating system developed by Microsoft as part of its Windows 9x family of Microsoft Windows operating systems. It is the successor to Win ...
). It is also known as UnicoWS (Unicode for Windows 95/98/Me Systems) or by its filename, . Microsoft described it as providing "a layer over the
Win32 API The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations th ...
on Windows 95/98/Me so that a software developer can write a single Unicode version of their application and have it run properly on all platforms." Previously, developers had to either provide two separate versions of an application, or perform complex string translations and
API An application programming interface (API) is a way for two or more computer programs to communicate with each other. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how ...
decisions at runtime. In the present, UnicoWS can be used to compile newer software, which often expects Unicode support, (partially due to the influential " UTF-8 Everywhere" manifesto,) for legacy versions of Windows. UnicoWS can also be used at
link time In computer science, link time refers to the period of time, during the creation of a computer program, in which a linker is being applied to that program. Link time occurs after compile time and before runtime (when a program is executed). I ...
to compile software in languages that did not exist contemporaneously with Windows 9x and require Unicode support, like
Rust Rust is an iron oxide, a usually reddish-brown oxide formed by the reaction of iron and oxygen in the catalytic presence of water or air moisture. Rust consists of hydrous iron(III) oxides (Fe2O3·nH2O) and iron(III) oxide-hydroxide (FeO(OH) ...
. Alternatives exist, among them ,
The Open Layer for Unicode for Windows
, an
abandonware Abandonware is a product, typically software, ignored by its owner and manufacturer, and for which no official support is available. Within an intellectual rights contextual background, abandonware is a software (or hardware) sub-case of the g ...
yet free ( MPL 1.1/ GPL 2.0/
LGPL The GNU Lesser General Public License (LGPL) is a free-software license published by the Free Software Foundation (FSF). The license allows developers and companies to use and integrate a software component released under the LGPL into their ow ...
2.1 licensed) re-implementation of the MSLU by Mozilla.


Availability

The MSLU was announced in March 2001, and was first made available as a
compatibility layer In software engineering, a compatibility layer is an interface that allows binaries for a legacy or foreign system to run on a host system. This translates system calls for the foreign system into native system calls for the host system. With som ...
for Unicode-supporting code written for the then-new Windows XP RC1 in the July 2001 edition of Microsoft's
Platform SDK Microsoft Windows SDK, and its predecessors Platform SDK, and .NET Framework SDK, are software development kits (SDKs) from Microsoft that contain documentation, header files, libraries, samples and tools required to develop applications for Mic ...
. This drew criticism from developers who feel it was "
too late Too Late may refer to: Film and theatre *'' Too Late (1914 film)'', American film written by Winifred Dunn * ''Too Late'' (1996 film), a Romanian film * ''Too Late'' (2000 film), a Portuguese film * ''Too Late'' (2015 film), an American film * ...
", as it was released long past the peak popularity of Windows 9x and only one month before the release to manufacturing of Windows XP. MSLU was given the codename ''Godot'', a reference to '' Waiting for Godot'', a play centered around the failure of a man named "Godot" to arrive and the endless wait for him, because such a Unicode compatibility layer was thought—even inside Microsoft—to have been long overdue.


How it works

Normally, the
Windows API The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations th ...
provides both (
ANSI The American National Standards Institute (ANSI ) is a private non-profit organization that oversees the development of voluntary consensus standards for products, services, processes, systems, and personnel in the United States. The organi ...
escape codes and
ASCII ASCII ( ), abbreviated from American Standard Code for Information Interchange, is a character encoding standard for electronic communication. ASCII codes represent text in computers, telecommunications equipment, and other devices. Because of ...
characters) and ( "wide" character) versions of most subroutines. On Windows 9x, only the versions are implemented and attempting to call a version will fail with an error code that indicates that the function is unimplemented. On the Windows NT line of operating systems, both the and versions are implemented (however, the operating system generally only internally implements the version natively, and the version is usually a translation thunk to the version). By adding the to the link command-line before , , or any other supported Win32 system link library, the linker will resolve referenced symbols with the ones provided by instead. When a wide-character function is called for the first time at runtime, the function stub in first receives control and checks if it is running on a Windows 95/98/Me system: * If so, it dynamically loads (if it hasn't been loaded yet) and passes control to the corresponding thunking stub in there. The thunking stub translates the wide-character arguments into ANSI strings and then invokes the native version from the OS, and translates any returned strings back into wide character format. * If the OS natively supports the version (i.e. the Windows NT line of operating systems), then the function stub updates the in-memory
symbol table In computer science, a symbol table is a data structure used by a language translator such as a compiler or interpreter, where each identifier (or symbols), constants, procedures and functions in a program's source code is associated with inf ...
so that future calls will directly invoke the native version without any more overhead. Because of this technique, when an application is linked against MSLU, only Windows 95/98/Me systems will need to rely on at runtime, and on all other versions of Windows there is only a slight performance penalty the first time a function is called. A common problem encountered occurs when some update packages or uninstall programs rename or delete either of the OLE libraries (, ), which are dependencies of . This results in some applications, such as
OpenOffice.org OpenOffice.org (OOo), commonly known as OpenOffice, is a discontinued open-source office suite. Active successor projects include LibreOffice (the most actively developed), Apache OpenOffice, Collabora Online (enterprise ready LibreOffice) an ...
, showing an error with the message "Application cannot start because one of the required libraries cannot be found." This occurs even if is installed in the system, as it cannot start without its dependencies (see also DLL hell).


References


External links


Microsoft


Official announcement of availability

MSDN Magazine article describing MSLU

MSDN programming reference pages

Michael Kaplan's blog entries about MSLU internals

Download of MSLU redistributable (UNICOWS.DLL)

Known bugs in each released MSLU version
— formerly maintained by Michael Scott Kaplan, an employee of Microsoft who was the principal developer and maintainer for MSLU.


Open source alternatives


libunicows
— provides an MIT-licensed version of only the UNICOWS.LIB link-library, but still requires the Microsoft-provided or Mozilla's .
opencow (previously MZLU)
— reimplements both the DLL and LIB link-library as MPL 1.1/GPL 2.0/LGPL 2.1, originally for and by Mozilla. {{DEFAULTSORT:Microsoft Layer For Unicode Layer for Unicode Unicode