Please provide a short (approximately 100 word) summary of the following web Content, written in the voice of the original author. If there is anything controversial please highlight the controversy. If there is something surprising, unique, or clever, please highlight that as well. Content: Title: Genode's Browser Odyssey (2022) Site: genodians.org Genode's Browser Odyssey January 27 2022 by Norman Feske This article tells the twisted story behind Genode's native web browser, which is one of the most prominent achievements of the project during the past year. It is going to cover our motivation behind this undertaking, the rationale behind the choice of the browser engine, and many technical tidbits. Before starting, let me give credits where credits are due. Most of the development described below was the work of my dear colleague Christian Prochaska, who relentlessly worked on the topic with a super-human level of patience. My role was for the most part watching in awe what he was doing. Motivation I think I'm not exaggerating when stating that the majority of application areas for computers and smartphones is covered by HTML5-based web applications, which are universally accepted by end users by now. By combining a modern web engine with Genode, we aim at making this wide variety of modern-day applications readily available on Genode. We are particularly interested in using those applications under Genode on the PinePhone. However, this is anything but an easy feat because web engines are not only among the most complex software stacks, but also moving targets. We nevertheless took the challenge of re-targeting a complete HTML5 browser engine to the Genode OS framework. The breadth and depth of this line of work has yielded invaluable insights into the practical challenges when combining a state-of-the-art browser engine with microkernel-based operating system technology. With breadth, I refer to the scope of challenges ranging from taming highly complex build systems, over the comprehension of the entire POSIX API surface and the whole stack of protocol layers including the C runtime, networking, multiple application frameworks, up to web-application interfaces. With depth, I refer to the need to look behind the curtains of all those layers when troubleshooting issues, e.g., like investigating memory-corruption bugs in JIT-compiled Javascript code originating from a remote website. Browser engines The diversity of web-browser technology has dramatically decreased during the past decade. When it comes to modern open-source HTML5 engines that are compatible with the majority of modern web applications, there exist only three predominant competing implementations, namely WebKit developed by Apple, Gecko developed by the Mozilla Foundation, and Blink (Chromium) developed by Google. Mozilla's Gecko engine has a history reaching back to 1997 when it formed the basis of the Netscape Navigator. Today, it largely remains as the technology behind the Firefox web browser and the Thunderbird email client. Gecko is an open-source project under the Mozilla Public License, which is a weak copyleft license in the spirit of the Apache license. Apple's WebKit was originally based on the KHTML engine of the KDE project . In the years after the fork, it got widely adopted beyond Apple's products. For example, Qt4's HTML5 support used to rely on WebKit. Also early versions of Google's Chrome browser employed this engine. WebKit is an open-source project using the weak copyleft LGPLv2 license and the liberal 2-clause BSD license. Google's Blink engine is the basis of the Chromium project , which in turn is the basis of the Chrome web browser. It originated as a fork of WebKit to foster Google's agenda to establish the browser as commodity runtime for end-user applications. Hence, Chromium introduced functionality that was previously considered as the domain of operating systems, e.g., sandboxing, hardware-accelerated graphics (WebGL), webcam support, or audio. Chromium is an open-source project using mostly the liberal 2-clause BSD license. Today, Chromium is by far the most widely used browser engine. It has a market share of more than 60% . Apple's WebKit remains mostly used by Safari and iOS with a market share of around 20%. In contrast, the market share of Mozilla's Gecko engine had dropped below 10%. The predominance of Chromium eventually prompted Microsoft to replace their former in-house-developed Internet Explorer with the Chromium-based Edge browser for the Windows operating system. As another former browser-engine vendor, Opera adopted Blink as the basis of their current offerings. Given the dominant market share of Chromium, developers of web applications increasingly focus their development and testing efforts on this single implementation. In fact, web applications are anecdotally known to work best on Chromium-based browsers. This consolidation is a two-edged sword. On the one hand, given that Chromium is an open-source project, it gives users and developers more freedom compared to the proprietary browser engines of the past. On the other hand, this technology is ultimately defined and controlled by a single vendor, which drives its development. Chromium is a combination of a fast-moving target and extremely high complexity. Because of Google's investment, the mind share behind the technology is effectively centralized and follows the corporate interests of the company. The complexity of the technology - regardless of its open source license - makes a community-governed fork practically impossible. To illustrate the latter point, Chromium consists of more than 17 million lines of source code (sloccount, not counting comments or white space), which is close to the entirety of the Linux kernel including all drivers and CPU architectures. In contrast to Linux, however, the direction of Chromium is controlled by a single vendor. To put those numbers into perspective, in terms of source code, the Chromium browser is around 50 times larger than the entire Genode operating-system project (with all of the more than 250 components combined). Even though the near-monopoly position of Google in the browser space is unfortunate, there is no realistic alternative to Chromium for pursuing our goal to host a large share of popular applications on Genode, with low friction for the end user. So we had to accept the challenge to bring Chromium to life on top of Genode. Porting spree Our starting point was the Qt application framework . Qt is a popular and rich cross-platform application framework including a graphical widget tool kit and abstractions for the interaction between application software and the underlying operating system. Applications developed using the framework can be targeted at all platforms supported by Qt, which include Linux, Windows, and Mac OS X. Since more than 10 years, the Genode OS Framework supports the integration of Qt-based applications into Genode-based systems. The Qt framework is equipped with bindings for many popular open-source libraries. In particular, Qt version 4 supported bindings to the WebKit browser engine, which ultimately enabled us to bring the WebKit-based Arora browser to Genode in 2010 . The WebKit-based Arora browser running on Genode version 10.05. The feature set and dominance of Chromium prompted the Qt project to replace WebKit by the Chromium engine in Qt 5.4 in 2014. The integration of the Chromium engine in Qt5 is called QtWebEngine. However, for Genode's Qt5 port, we used to disregard QtWebEngine as too complex. Whereas WebKit comprised 1.8 million lines of code, QtWebEngine is literally 10 times larger. However, now, with the goal of enabling the Chromium engine on Genode set, QtWebEngine looked like an attractive and attainable path forward, which would in principle allow us to reuse our existing integration of Qt with Genode for the browser's graphical user interface. Building from source for a known-to-work platform To get acquainted with Chromium, we first took the beaten track of building QtWebEngine for one platform officially supported by the Qt project, namely Linux. For testing the result, we used a minimal browser example that comes shipped with Qt. The complexity of the Chromium code became immediately apparent. Even though we disabled a number of default features like geolocation, printing, PDF support, spell checking, WebRTC, or proprietary media codecs, our development machine equipped with a 16-core AMD EPYC 7302P processor took almost one hour to build QtWebEngine using -j32 . The resulting libQt5WebEngineCore library has a stripped size of 132 MiB (741 MiB with debug information), which is by far the biggest build artifact we ever encountered. FreeBSD and Linux/ARM64 as intermediate targets Genode's C runtime is based on FreeBSD's libc, which is subtly different from the glibc predominately used on Linux-based operating systems. To rule out incompatibility issues early on, we decided to first try building and using QtWebEngine on FreeBSD. Note that FreeBSD is not officially supported. But fortunately, a patch set maintained by the FreeBSD community exists. Using the FreeBSD build, we could gradually strip down the external dependencies to only fontconfig and the nss library, both of which we manually disabled. The working build result on FreeBSD reinforced our confidence that a Genode build of QtWebEngine is in principle attainable. A second source of uncertainty was the unknown compatibility and performance of QtWebEngine on the 64-bit ARM architecture. To assess the risk, we built and tested the minimal browser example for Linux on the i.MX8 EVK board, whic