1. INTRODUCTION

Wine is a program which allows running Microsoft Windows programs
(including DOS, Windows 3.x and Win32 executables) on Unix.  It
consists of a program loader which loads and executes a Microsoft
Windows binary, and a library (called Winelib) that implements Windows
API calls using their Unix or X11 equivalents.  The library may also
be used for porting Win32 code into native Unix executables.

Wine is free software, and its license (contained in the file LICENSE)
is BSD style.  Basically, you can do anything with it except claim
that you wrote it.

2. QUICK START

Whenever you compile from source, it is recommended to use the Wine
Installer to build and install Wine.  From the top-level directory
of the Wine source (which contains this file), run:

./tools/wineinstall

Run programs as "wine [options] program".  For more information and
problem resolution, read the rest of this file, the Wine man page,
the files in the documentation directory of the Wine source
(see "DOCUMENTATION"), and especially the wealth of information
found at http://www.winehq.com.

3. REQUIREMENTS

To compile and run Wine, you must have one of the following:

	Linux version 2.0.36 or above
	FreeBSD 4.x or FreeBSD 5-CURRENT
	Solaris x86 2.5 or later
	NetBSD-current

Linux info:
  Although Linux version 2.0.x will mostly work, certain features
  (specifically LDT sharing) required for properly supporting Win32
  threads were not implemented until kernel version 2.2.  If you get
  consistent thread-related crashes, you may want to upgrade to at least 2.2.
  Also, some bugs were fixed and additional features were added
  late in the Linux 2.0.x series, so if you have a very old Linux kernel,
  you may want to upgrade to at least the latest 2.0.x release.

FreeBSD info:
  Make sure you have the USER_LDT, SYSVSHM, SYSVSEM, and SYSVMSG options
  turned on in your kernel.
  More information including patches for the 4-STABLE branch is in the
  ports tree:
  ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/ports/emulators/wine/files/

Solaris info:
  You will most likely need to build Wine with the GNU toolchain
  (gcc, gas, etc.). Warning : installing gas does *not* ensure that it
  will be used by gcc. Recompiling gcc after installing gas or 
  symlinking cc, as and ld to the gnu tools is said to be necessary.

NetBSD info:
  Make sure you have the USER_LDT, SYSVSHM, SYSVSEM, and SYSVMSG options
  turned on in your kernel.

File systems info:
  Wine should run on most file systems. However, Wine will fail to start
  if umsdos is used for the /tmp directory. A few compatibility problems have
  also been reported using files accessed through Samba. Also, as NTFS
  can only be used safely with readonly access for now, we recommend against
  using NTFS, as Windows programs need write access almost everywhere.
  In case of NTFS files, copy over to a writable location.

Wine requires kernel-level threads to run. Currently, only Linux
version 2.0 or later, FreeBSD-current or FreeBSD 3.0 or later,
Solaris x86 version 2.5 or later, and NetBSD-current are supported.
Other operating systems which support kernel threads may be supported
in the future.

You need to have the X11 development include files installed
(called xlib6g-dev in Debian and XFree86-devel in RedHat).
To use Wine's support for multi-threaded applications, your X libraries
must be reentrant, which is probably the default by now.
If you have libc6 (glibc2), or you compiled the X libraries yourself,
they were probably compiled with the reentrant option enabled.

On x86 Systems gcc >= 2.7.2 is required.
Versions earlier than 2.7.2.3 may have problems when certain files
are compiled with optimization, often due to problems with header file
management. pgcc currently doesn't work with Wine. The cause of this problem
is unknown.

You also need flex version 2.5 or later and yacc.
Bison will work as a replacement for yacc. If you are
using RedHat or Debian, install the flex and bison packages.

For requirements in case you intend to build the documentation yourself,
see "DOCUMENTATION" section.

4. COMPILATION

In case you chose to not use wineinstall, run the following commands
to build Wine:

./configure
make depend
make

This will build the program "wine" and numerous support libraries/binaries.  
The program "wine" will load and run Windows executables.
The library "libwine" ("Winelib") can be used to compile and link
Windows source code under Unix.

To see compile configuration options, do ./configure --help.

To upgrade to a new release by using a patch file, first cd to the
top-level directory of the release (the one containing this README
file). Then do a "make clean", and patch the release with:

    gunzip -c patch-file | patch -p1

where "patch-file" is the name of the patch file (something like
Wine-yymmdd.diff.gz). You can then re-run "./configure", and then
run "make depend && make".

5. SETUP

Once Wine has been built correctly, you can do "make install"; this
will install the wine executable, the Wine man page, and a few other
needed files.

Don't forget to uninstall any conflicting previous Wine installation
first.  Try either "dpkg -r wine" or "rpm -e wine" or "make uninstall"
before installing.

If you want to read the documentation supplied with the Wine source,
see the "DOCUMENTATION" section.

Wine requires a configuration file named named "config" in your
~/.wine directory. The format of this file is explained in the config file
man page (documentation/wine.conf.man).
The file documentation/samples/config contains an example configuration file
which has to be adapted and copied to the location mentioned above.

Don't forget to add vital registry entries by applying winedefault.reg
with programs/regapi/. See documentation/ directory for details.

See http://www.winehq.com/support.shtml for further configuration hints.

In case of library loading errors
(e.g. "Error while loading shared libraries: libntdll.so"), make sure
to add the library path to /etc/ld.so.conf and run ldconfig as root.

In order to verify the correctness of the environment you need for
Wine to run successfully, you may run "./tools/winecheck | less".
You'll get a percentage score indicating "Wine configuration correctness".
As this program is alpha, it doesn't run a truly thorough test yet, though,
so it should be taken as a first verification step only.

See wine.conf man page on how to switch to text mode only support if desired.

6. RUNNING PROGRAMS

When invoking Wine, you may specify the entire path to the executable,
or a filename only.

For example: to run Solitaire:

	wine sol		   (using the searchpath to locate the file)
	wine sol.exe

	wine c:\\windows\\sol.exe  (using a DOS filename)

	wine /usr/windows/sol.exe  (using a Unix filename)

Note: the path of the file will also be added to the path when
      a full name is supplied on the commandline.

Wine is not yet complete, so several programs may crash. Provided you set up
winedbg correctly according to documentation/debugger.sgml, you will be dropped
into a debugger so that you can investigate and fix the problem.
For more information on how to do this, please read the file
documentation/debugging.sgml.
If you post a bug report, please read the file documentation/bugs.sgml to
see what information is required.

You should backup all your important files that you give Wine access
to, or use a special Wine copy of them, as there have been some cases
of users reporting file corruption. Do NOT run Explorer, for instance,
if you don't have a proper backup, as it renames/cripples several
directories sometimes. Not even other MS apps such as e.g. Messenger are safe,
as they launch Explorer somehow. This particular corruption (!$!$!$!$.pfr)
can at least partially be fixed by using
http://home.nexgo.de/andi.mohr/download/decorrupt_explorer

7. DOCUMENTATION

Some documentation (various Wine Guides etc.) can be found in the
documentation/ directory (apart from also being available on WineHQ).

If you want to process the SGML files in there, then you can run "make"
in the documentation/ directory.
Doing so requires the sgml tools package (for db2html, db2ps, db2pdf) named:
Debian:		docbook-utils
Mandrake:	sgml-tools-A.B.C-DDmdk
SuSE:		docbktls-A.BB.C-DD

8. GETTING MORE INFORMATION

WWW:	A great deal of information about Wine is available from WineHQ at
	http://www.winehq.com/ : various Wine Guides, application database,
	bug tracking. This is probably the best starting point.

FAQ:	The Wine FAQ is located at http://www.winehq.com/FAQ

HOWTO:	The Wine HOWTO (outdated !) is available at
	http://www.westfalen.de/witch/wine-HOWTO.txt .

Usenet:	The best place to get help or to report bugs is the Usenet newsgroup
	comp.emulators.ms-windows.wine. Please read the file 
	documentation/bugs.sgml to see what information should be included 
	in a bug report.

	Please browse old messages on http://groups.google.com/ to check
	whether your problem is already fixed before posting a bug report
	to the newsgroup. 

IRC:	Online help is available at channel #WineHQ on irc.openprojects.net.

CVS:	The current Wine development tree is available through CVS.
	Go to http://www.winehq.com/dev.shtml for more information.

Mailing lists:
	There are several mailing lists for Wine developers; see 
	http://www.winehq.com/dev.shtml#ml for more information.

If you add something, or fix a bug, please send a patch (in 'diff -u'
format) to julliard@winehq.com or to the wine-patches@winehq.com
mailing list for inclusion in the next release.

--
Alexandre Julliard
julliard@winehq.com
