Experimental tool for running Linux binaries on Windows
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


                                  LBW v0.1
                         Copyright (C) 2010 David Given

LBW is a system call translator that allows you to run unmodified Linux
ix86 binaries on Windows.

It is not virtualisation; only one operating system is running, which is
the Windows one. It is the equivalent of WINE, but in reverse, translating
Linux system calls into Windows ones for execution. It is not emulation; the
Linux applications run directly on the processor, resulting in (theoretically)
full native performance.

Currently it is in a proof-of-concept stage and is no way suitable for doing
real work on --- it's full of bugs --- but currently it's good enough to run
a Debian chroot, install packages with apt and dpkg, compile and run programs
using gcc, ssh into remote terminals, and even run some basic X clients.
Both static and dynamic binaries are supported (using Linux's own user-space
dynamic binary loader).

Right now it's known to work on Windows XP (because that's where I do my
development). It is known not to work on Windows 7 --- I don't know why
(assistance appreciated). I have no access to other Windows versions. Please
let me know the results if you try it.

LBW is released under the MIT open source license; please see the file
LICENSE in the installation directory for the full text.

                                *** BEWARE ***

                                 LBW is EVIL.
                        Lots of things in LBW don't work!
                        Lots of things will *never* work!
                                IT WILL CRASH.
                   Back up your data, keep your system secure,
                              and above all else:

                             YOU HAVE BEEN WARNED.


The distribution package will (if you let it) set up a simple little chroot
using BusyBox. You can run this from the Start menu. This can be used to
run static binaries. If you want to run dynamic libraries, see the section
below on running Debian. (Or you could install the libraries in the BusyBox
shell, but you'll have to do this yourself.)

/proc is not supported yet; some applications will fail due to its absence.

/home is symlinked to point at your Windows home directory;
"/home/My Documents" and "/home/Desktop" will work, for example.

Your Windows drives can be found in /dev/fs.

You *can* run Windows software directly from inside LBW --- make sure the
.exe is executable and just run it.

You can run as many LBW shell sessions as you like.

LBW can be run manually from the Windows command line. The syntax is:

    posix /c "C:\PathWhereYouInstalledLBW\lbw" \
        [<LBW options...>] <executable> [<Linux options...>]
There is a bug in Interix where the above won't work if the executable is in
a path containing spaces --- such as C:\Program Files. The 'posix /c' works
around this. And yes, the lbw executable is *supposed* to not have a .exe
file extension.

LBW can *also* be run manually from an Interix or LBW command line. In this
situation, do:

        [<LBW options...>] <executable> [<Linux options...>]

It's perfectly safe to run LBW from inside LBW --- in fact, that's what
happens normally when you run programs.

LBW supports the following command line options:

    --help         Displays brief usage information.
    --fakeroot     Enables a simple fakeroot mode.
                       Note that this is not a real fakeroot; all it does is
                       force getuid() to return 0 and make chown() etc ignore
                       errors. It's just enough to keep Debian happy.
    --chroot <dir> Set up a simple chroot.
                       This is not a real chroot; it's entirely not suitable
                       for security purposes, and some of the semantics
                       aren't right.
    --warnings     Show emulation warnings.
                       Normally when LBW sees something it doesn't handle
                       properly it won't warn the user (as it gets really
                       annoying when you just want to get stuff done). This
                       option will cause LBW to spam you with all the info.


If you want to run a full Debian chroot, you will need access to a real Debian
32-bit x86 machine to contruct a filesystem. (For legal reasons I cannot
distribute a Debian filesystem with LBW, and cdebootstrap doesn't work yet.)

On your Debian system, become root, and then do:

   cd /tmp
   deboostrap lenny debian
   tar cvjf debian.tar.bz2 debian
Transfer the debian.tar.bz2 file to the desktop of your Windows machine.

On the Windows machine, start the BusyBox shell and do:

   cd /
   tar xvjf "/home/Desktop/debian.tar.bz2"
Once it's decompressed, you can start the Debian chroot with:

   fakeroot chroot debian /bin/sh
You probably next want to teach Debian about the console by doing:

   tic "$LBWHOME/interix.termcap"
...and then:

   apt-get update
   apt-get install python

Bear in mind that the system is not fully initialised, and it will require
some tinkering to make work. Also, LBW simulates Linux *processes*, not a
Linux *machine*; whenever Debian tries to do system management, such as
adding users or trying to run init, it will fail. 

Plus, various things do *not* work, some things crash, some things fail in
really weird ways that confuse the package manager, etc. I have to wipe and
reinitialise my Debian chroot on a regular basis as things go wrong with it.
On the other hand, lots of stuff works, so if you're careful, you can get a
lot done.


Please see the website at:

...for more information, including a discussion of the things that don't
work (which I'm not going into here, because there's just too many).


Prime Mover was written by me, David Given. You may contact me at
dg@cowlark.com, or visit my website at http://www.cowlark.com. There may or
may not be anything interesting there.


2010-04-01: First version released to an unsuspecting world. Many thanks to
Jayson Smith for being the first guinea-pig to try this *ever*. He's a brave
man and a lucky one.