Foreign Linux (aka flinux) is a project to run unmodified Linux binaries on Windows without any drivers or modifications to the system. The philosophy is different to packages like Cygwin or Wine. The latter two are high level emulators while Foreign Linux works at a low level implementing kernel system calls and use the original unmodified system libraries to provide common ABIs. The approach, though more complex, reduces the amount of work and increases the efficiency of the emulation.
Foreign Linux can dynamically translate Linux system calls to their Windows equivalents or emulate them if not available (for example, fork implementation). A dynamic binary translator is introduced to process the binaries and transform the incompatible bits before it is run.
Foreign Linux is under heavy development at the time of writing. The following applications are among the ones that work currently:
- Basic utilities: bash, vim, nano
- Programming environments: python, gcc
- Package managers: pacman
- Terminal-based games: vitetris, nethack
- Network utilities: wget, curl, ssh
- X applications: xeyes, xclock, glxgears
Functionalities missing include file permissions, process management, signals, multi-threading, and more. Applications depending on these technologies will not work properly.
- Run unmodified Linux applications in a pure user-mode application, no privileged code or drivers or virtual machines
- Support both dynamically and statically compiled executables
- Support NTFS native hardlinks and emulated symbolic links
- Xterm-like terminal emulation on Win32 console
- Client-side networking (sockets) support
Follow the Beginner’s Guide for download link and to walk through the setup.