Installing hosted Inferno from source Overview
Like the native kernels emu relies on several auxiliary libraries (the source of which it often shares with the native kernels). Emu itself is built by the mkfile in the emu subdirectory containing the platform-specific source for the host platform. Each library has its own mkfile ; the various components are made in the right order by the mkfile at the root of the Inferno tree. The mkfile for each platform will also invoke mk recursively to make the appropriate libraries for a given configuration.
The Unix emu variant generally is covered by `POSIX' (with common extensions) but each Unix port has one file that differs considerably for each port, namely \f5emu/platform\f5/os.c, the differences corresponding to the different ways under Unix of implementing kernel-scheduled threads efficiently.
There are working emu versions for FreeBSD/386, Irix/mips, Linux/386, NetBSD/386, MacOSX/386, MacOSX/power, Plan 9, Solaris/sparc, and Windows (NT, 2000 and Explorer plug-in). Each platform typically uses mechanisms specific to the host operating system to implement Inferno's internal thread/process structure. POSIX threads have often been found to be insufficient (poorly implemented) on some platforms, and if so are avoided. See kproc in emu/*/os.c .
Source is included for ports to HP/UX (S800 architecture), Solaris/386, and Unixware, in case someone wishes to take them up now, but we have not determined their fitness.
The Plan 9 hosted implementation is unusual in that it supports several processor types: 386 , mips , power (Power PC) and sparc . Furthermore, all versions of emu can be built on any processor type, in the usual way for Plan 9.
Otherwise, as distributed, emu for a platform can only be built when running on that platform.
One unusual variant makes the whole of Inferno a plug-in for Microsoft's Internet Explorer, giving the same environment for Inferno applications running in an HTML page as is provided by hosted or native Inferno. That is, there is not a distinct `applet' environment with special programming interfaces. The source for the various plug-in components is found in /tools/plugin and /usr/internet within the Inferno tree; they use the version of emu defined by the configuration file /emu/Nt/ie .
Build stepsAll the libraries and executables can be built in a tree containing only the source code. To do that for a supported variant of hosted Inferno, on Unix or Plan 9, do the following in the root of the Inferno tree: .nr Ci 0 +1
Doing something similar on Windows or Plan 9 currently requires the executable for mk to be available in the search path, since there is no equivalent of makemk.sh . Otherwise the procedure is the same. On Plan 9, of course, the host system's normal version of mk should be adequate.