README.md

Obtaining and installing a Midipix distribution

A Midipix distribution consists of the following: * the native Midipix toolchain, consisting of perk, gcc, its dependencies, and binutils, * musl, a lightweight, fast, simple, and free libc[1] used by Midipix, * the Midipix runtime components that bridge the gap between the libc and the executive subsystems of all Windows NT-derived Windows OS starting with and including Windows XP, and * a steadily increasing number of 3rd party open source packages, as expected in any modern POSIX-compliant *nix environment, including GNU coreutils, shells, libraries such as ncurses, libressl, as well as Perl and Python.

Compressed Midipix distribution tarballs and, separately, source tarballs are, at present, produced every four (4) hours UTC after each successful build and subsequently signed. This process is fully automated by a portable Bourne shell script; all of the above mentioned components are cross-compiled.

Thus, the most hassle-free way to get started with Midipix is to simply download the most recent distribution tarball and follow the instructions below. It is, however, recommended to anyone intending to use Midipix as a development platform to familiarise themselves with the build process. Other reasons to prefer building a Midipix distribution yourself include integrating new 3rd party software or local runtime component patches. At present, a full build from scratch takes about 30 (thirty) minutes to finish on an 8-core host with eight simultaneous make jobs, minus the generation of the tarballs. The build script can be obtained from the following GitHub repository: https://github.com/lalbornoz/midipix_build.

If you obtained a Midipix distribution tarball, extract it into a directory and drive of your choice, henceforth referred to as target directory; the drive can be a network drive. Do not use anything but a true UNIX environment tar(1), as e.g. WinRAR or WinZip handle extracting hard links incorrectly. If you built Midipix yourself, the target directory is equivalent to the ${PREFIX} configured in build.vars, which defaults to ${HOME}/midipix.

At present, providing an interactive Midipix environment still requires the Cygwin terminal emulator Mintty and a shell; this does not include pseudoterminals, which are entirely handled by Midipix. Both can be installed via the 64-bit Cygwin setup program at https://www.cygwin.com/setup-x86_64.exe.

Once installed, launching a Midipix shell is accomplished by the midipix.sh' shell script provided in the target directory from within a Cygwin shell prompt in Mintty and the target directory. This may either simply be done manually each time, or automated by a shortcut. As shortcuts cannot be distributed, it can be created by either: * Opening (executing) the VBScript script in the target directory from within the latter cscript.exe, providing the fully qualified pathname to Mintty, if it differs from the default value of C:\cygwin64\bin\mintty.exe or * manually creating a shortcut to Mintty withStart in:' set to the target directory and the following command line: [ ... ]\mintty.exe -i /Cygwin-Terminal.ico -e sh midipix.sh, or

References: * Sun, 24 Apr 2016 09:04:08 +0000 [1] musl FAQ http://www.musl-libc.org/faq.html

Linux distribution-related errata

Busybox based distributions need the gawk, gsed, and coreutils packages to build perl.

Midipix status report

Last update: Tue, 26 Apr 2016 10:16:16 +0000

The following build status codes are defined: * C -- Complete build w/ at least the default configuration, * B -- Broken, e.g. doesn't work at all or only minimally, * I -- Integrated (e.g. linked against) with other packages, * E -- Extensively tested and confirmed to work by multiple sources, possibly via a testsuite, * P -- Patches needed to build that haven't been committed upstream yet, and * U -- Update to latest stable version or HEAD pending.

Component type Name Version Status Comments
Host toolchain binutils 2.24.51 C--EPU
Host toolchain file 5.28 C-----
Host toolchain gcc 4.6.4 ---EPU Excludes libstdc++
Host toolchain musl 1.1.12 C-IEPU
Host toolchain perk HEAD C-IE--
Host toolchain pkgconf 0.28 C--E--
Host toolchain slibtool 0.5.7 C--E--
Native toolchain binutils 2.24.51 C--EPU
Native toolchain gcc 4.6.4 ---EPU Excludes libstdc++
Native toolchain gmp 5.1.3 C-IEPU
Native toolchain libelf 0.8.13 C-IEP-
Native toolchain mpc 1.0.1 C-IE-U
Native toolchain mpfr 3.1.2 C-IE-U
Native toolchain musl 1.1.12 C-IEPU
Native toolchain perk HEAD C-IE--
Native toolchain pkgconf 0.28 C-IE--
Runtime components dalist HEAD C-IE--
Runtime components ntapi HEAD C-IE--
Runtime components ntcon HEAD C-IE--
Runtime components ntctty HEAD C-IE--
Runtime components pemagine HEAD C-IE--
Runtime components psxscl HEAD C-IE-- Excludes clone(2) and dlopen(3)
Runtime components psxtypes HEAD C-IE--
Runtime components ptycon HEAD C-IE--
3rd party libraries bzip2 1.0.6 C-IE--
3rd party libraries curl 7.47.1 C---P-
3rd party libraries expat 2.2.0 C-----
3rd party libraries gdbm 1.12 C-I---
3rd party libraries glib 2.46.2 C-I-P- Shared object not built
3rd party libraries gzip 1.2.4 C-IE--
3rd party libraries inputproto 2.3.2 C-----
3rd party libraries kbproto 1.0.7 C-----
3rd party libraries libarchive 3.1.2 C-I-P-
3rd party libraries libassuan 2.4.3 C-I---
3rd party libraries libevent 2.0.22-stable C-I---
3rd party libraries libfetch 2.33 C-I-P-
3rd party libraries libffi 3.2.1 C-I-P-
3rd party libraries libfirm HEAD C-I-P-
3rd party libraries libgcrypt 1.7.3 C-I---
3rd party libraries libgpg_error 1.24 C-I-P-
3rd party libraries libICE 1.0.9 C-----
3rd party libraries libksba 1.3.5 C-I-P-
3rd party libraries libpipeline 1.4.1 C-I---
3rd party libraries libpthread-stubs 0.3 C-----
3rd party libraries libressl 2.2.6 C-I-P-
3rd party libraries libSM 1.2.2 C-----
3rd party libraries libX11 1.6.3 C-----
3rd party libraries libXau 1.0.8 C-----
3rd party libraries libXaw 1.0.13 C-----
3rd party libraries libXext 1.3.3 C-----
3rd party libraries libxkbfile 1.0.9 C-----
3rd party libraries libXmu 1.1.2 C-----
3rd party libraries libXpm 3.5.11 C-----
3rd party libraries libXt 1.1.5 C-----
3rd party libraries libz 1.2.8.2015.05.20 C-I---
3rd party libraries lua 5.3.3 C---P-
3rd party libraries ncurses 6.0 C-IEP- ncurses, ncursestw, and ncursesw built
3rd party libraries npth 1.2 C-I---
3rd party libraries pcre 8.39 C-I---
3rd party libraries renderproto 0.11.1 C-----
3rd party libraries xcb 1.12 C----- Needs pthreads / clone(2)
3rd party libraries xcb-proto 1.12 C-----
3rd party libraries xextproto 7.3.0 C-----
3rd party libraries xproto 7.0.29 C-----
3rd party libraries Xrender 0.9.9 C-----
3rd party libraries xtrans 1.1 C-----
3rd party libraries xz 5.2.2 C-IE--
3rd party packages apk_tools 2.6.6 C---P-
3rd party packages bash 4.3 C-I-P- Linked against ncursesw
3rd party packages cmake 3.6.3 C-I---
3rd party packages coreutils 8.23 C---P- Needs extensive testing
3rd party packages cparser HEAD C-I-P-
3rd party packages cron HEAD C---P-
3rd party packages dash 0.5.8 C----- Provides /bin/sh
3rd party packages diffutils 3.3 C-----
3rd party packages dos2unix 7.3.4 C-----
3rd party packages ed 1.13 C-----
3rd party packages file 5.28 C-----
3rd party packages findutils 4.5.14 C---P-
3rd party packages gawk 4.1.3 C-----
3rd party packages git 2.7.1 C----- Needs clone(2)
3rd party packages gnupg 2.1.15 C----- Needs /dev/[u]random, extensive testing
3rd party packages grep 2.22 C-----
3rd party packages hexcurse 1.60.0 C-I-P- Linked against ncursesw
3rd party packages htop 2.0.1 C-I-P- Linked against ncursesw
3rd party packages inetutils 1.9.4 C-----
3rd party packages infounzip 6.0 C-----
3rd party packages infozip 3.0 C-----
3rd party packages irssi 0.8.18 CB--P- DNS and /EXEC require clone(2) due to pthreads (see psxscl;) no Perl support
3rd party packages john 1.8.0 C---P-
3rd party packages less 481 C-I--- Linked against ncursesw
3rd party packages lynx 2.8.8rel2 C-----
3rd party packages make 3.81 C-----
3rd party packages man_db 2.7.5 C-----
3rd party packages mc 4.8.17 C-----
3rd party packages mksh R52c C-----
3rd party packages nano 2.5.3 C-I--- Linked against ncursesw
3rd party packages netcat 110 C---P-
3rd party packages openssh 7.1p2 C-I--- Linked against libressl
3rd party packages p7zip HEAD C-----
3rd party packages pacman 5.0.1 C---P-
3rd party packages patch 2.7 C-----
3rd party packages perl 5.22.1 ------ No dlopen(3) (see psxscl,) modules missing
3rd party packages procps-ng 3.3.12 C-----
3rd party packages python 3.5.1 -B--P- No dlopen(3) (see psxscl,) modules missing
3rd party packages rsync 3.1.2 C-----
3rd party packages rxvt-unicode 9.22 C-I--- No Perl support
3rd party packages sed 4.2.2 C-----
3rd party packages tar 1.28 C-----
3rd party packages tcsh 6.19.00 C-I-P-
3rd party packages the_silver_searcher 0.32.0 C-----
3rd party packages tmux 2.2 C---P-
3rd party packages util_linux 2.27.1 C----- Needs extensive testing
3rd party packages vim 7.4.1952 C----- Provides /bin/vi
3rd party packages weechat 1.6 C-----
3rd party packages which 2.21 C-----
3rd party packages whois 5.2.12 C-----
3rd party packages xeyes 1.1.1 C-I---
3rd party packages xwd 1.0.6 C-I---
3rd party packages zsh 5.2 C-I--- Linked against ncursesw