:  Linux Binaries on Windows :  Frequently Asked Questions

Linux Binaries on Windows

Frequently Asked Questions

Published: 2016 November 3

Haven't I seen something like this before?

Possibly. LBW's main inspirations are LINE and LOW. However, they never really got off the drawing board; LBW is considerably more capable. But I'd never have done LBW without them, so credit is due.

Does this replace Cygwin?

No. LBW is incredibly immature. Right now it works just enough to be interesting. It should under no circumstances be used for doing real work. Cygwin is written by real programmers who really know what they're doing and it really works.

(That said, the screenshot on the front page was resized using netpbm installed into a LBW Debian chroot. And I check all the source code into GIT using a static binary of Linux' GIT running under LBW.)

Does this replace virtualisation?

No. Virtualisation solves a different problem to LBW. Virtualisation lets you run two complete operating systems on the same machine, with isolation between them. LBW lets you run Linux programs using the Windows operating system; there is no isolation. LBW's file system is the Windows file system. LBW processes appear in the Windows task list. They use the Windows TCP/IP stack.

How complete is LBW?

Terrible. I run into new unimplemented system calls on a daily basis. Plus, some of the existing system calls aren't implemented properly, or are stubbed out.

Worse, some system calls cannot be implemented under Windows --- futex() and clone(), for example, require Windows kernel support (as far as I can tell). This means that LBW can't run Linux programs that use threads. I think I have a plausible workaround, but it'll be a while yet.

What's the performance like?

Lousy --- much poorer than it ought to be. I think I know why; see the technical wishlist page for details.

I've tried to run this program and I get a register dump and 'unimplemented syscall 123 (sys_foo_bar)'!

You've tried to use a syscall that LBW does not yet implement. Please let me know on the mailing list and I'll add it, or at least try to.

I've tried to run this program and I get a memory dump and 'unable to interpret above instruction sequence'!

See the technical wishlist for full details, but the short summary is that you've tried to execute an instruction that the processor cannot run natively, and LBW has failed to analyse it correctly to translate it. Please let me know on the mailing list and I'll fix it, or at least try to.

I've tried to run this program and I get some other crash!

I did mention LBW was full of bugs, right?

Please let me know on the mailing list and I'll try to look into it... but if you really want to make me happy, it would be utterly awesome if you could try and figure out exactly why it's crashing and let me know.

Does LBW contain any Linux source code?

No. As of writing, every line of code in LBW is mine. (Apart from trivial lists of symbol definitions taken from the Linux kernel headers.)

Does LBW contain any Microsoft source code?

No. It does call a few undocumented Windows NT kernel entry points, but it's based on publically available documentation everywhere.

Is it a clean-room reimplementation of the Linux kernel?

No. I've used the Linux kernel source extensively to try and figure out how the various system calls work --- the Linux system call documentation is not great.