Dear Netsurf developers,
I have started a port of Netsurf 3.9 to the operating system Plan 9
>). It uses the framebuffer frontend
for now, but I plan to continue with a native frontend, also possibly with help from other
I have got to the point where it is possible to run the browser, load local pages from the
file system, click on buttons and links. Several components requiring external libraries
are still missing, like image support, fetching pages from the network etc.
Plan 9 could be considered a "Unix like" OS, especially as it originally was
written by much the same authors as did write Unix. It is, however, in it self not Posix
compliant at the system-call level. My port uses the Posix emulation layer APE
>) in order to compile the
Netsurf sources. APE does not provide complete Posix support, especially not features
added in recent years, but given the size of the source code of Netsurf (which is big
compared to most Plan 9 software) things have gone surprisingly well, which is indeed a
testament to the quality of the Netsurf source. Another obstacle is that most larger GNU
development tools aren't available for Plan 9, no GCC for example. Plan 9 has its own
C compiler (<https://9p.io/sys/doc/compiler.html
>) that sometimes does things in
different ways, and typically doesn't support GCC extensions and newer features added
to the language lately.
In the absence of GCC/Autotools/GNUmake and friends, I have written my own build system
using Plan 9 'mk' (using 'mkfile'). I am aware that this makes a possible
upstream integration of the port harder. Alternative routes would have been making GCC
work on plan 9---some work has been done on this (<https://harvey-os.org
>), or to
try to generate plan 9 binaries from Linux using cross compilation. Both ways would be a
lot of compiler development work, and I am quite sure that the plan 9 community would
rather prefer something that will compile on the platform itself (as is with the current
port beginning). Even though plan 9 is a bit of a minimalistic OS with modest hardware
requirements, it runs on contemporary hardware (32-bit and 64-bit PC:s as well as
Raspberry PI:s), so a middle layer between the source and the system API is not that of a
big burden, especially as Netsurf is a lightweight browser, compared to the giants. In the
Plan 9 world, simplicity and clarity is praised over premature optimisation, and it is my
impression that the same holds for the Netsurf project to a large extent.
Anyhow, there is quite an excitement in the 9front crowd about the possibility to have
modern, yet well written and non-bloated, web browser available on the platform. The
existing browsers: Mothra (<http://man.9front.org/1/mothra
>) and Abaco
>) are usable for many things, but does
not support CSS and other modern features of the web. The browsers present do however
support 'https' trough the use of plan 9's own web content fetcher: Webfs
>). The plan 9 user base almost entirely consists of
programmers who uses plan 9 as their preferred development platform, mostly as a personal
and hobby system.
So far the port resides on my plan 9 file server at home, and I upload it here
>). Now when I managed to get it going, I am
thinking of hosting it in a repository for easier collaboration. Of course, it would be
really cool if the Plan 9 port in the future would be part of the official Netsurf project
in some way, which also would make it easier to keep up with new releases.
I started with the source tree of Netsurf 3.9, downloading all all support libraries
separately (that is why they have version numbers in the directories). I have not deleted
any files, only added files and changed files. All files 'xxx.y' that I changed
are backed up as 'orig_xxx.y' making it easier to 'diff' against the
original. I got the tip that it might be a good idea to make a clone of the official Git
repository and applying the diffs against it, in which case the 'orig_' files
won't be necessary, and a possible merger maybe easier to do in the future. Some of
auto-generated files (e.g. by perl scripts) are copied over from Linux build directory, to
reduce the number of external tools used during the compilation (and Plan 9 does not have
all of them).
I am interested in all kinds of feedback on the project, especially regarding what you
think about the the not so standard build system, and if/how you would think merging into
the official repository could be done in the future.
I've recorded a 14 minutes long video showing how I compile and run netsurf on 9front.
Be aware that the GUI is very slow, which is most likely because my framebuffer driver
copies the whole window bitmap for every change, and that the window output is sent to my
Mac where I use Quicktime to record. Running the browser directly on a 9front computer is
much snappier. Also, I expect remoteing the window to another computer to work much better
with a native frontend.
Streaming version of the video: (<https://hvplay.hv.se/media/t/0_6uyp5hck
Just the .mov file (168MB)
All the best, thank you for making Netsurf, and happy new year!