======== Road Map ======== Herein, we lay out our plans for evolving Genode. Progress in addition to this planning will very much depend on the degree of community support the project will receive. The [http:/about/challenges - Challenges] page collects some of our ideas to advance Genode in various further directions. The road map is not fixed. If there is commercial interest of pushing the Genode technology to a certain direction, we are willing to revisit our plans. Review of 2018 ############## Sculpt is our take on creating a Genode-based general-purpose operating system. When we declared 2018 as Genode's Year of Sculpt one year ago, our vision of how Sculpt OS would shape up was still vague. We were convinced that we had - functionality-wise - all building blocks of a general-purpose OS in place. But it was rather unclear how to best put them together to attain a practical system. The unconquered design space seemed vast, which was both exciting but also - at times - a bit paralyzing. The Year of Sculpt was more than anything a design-space exploration, not an up-front planned activity. The process was driven by intensive brainstorming, experimentation, and the continuous practical evaluation through the day-to-day use of the system by its developers. For us, this ride was certainly the most rewarding period in Genode's history so far. Now, when looking at the result, we are proud about what we have achieved together. Whenever having the chance to showing off Sculpt running on our laptops, the system doesn't fail to impress. Unsurprisingly, many topics of the past year had a direct connection to Sculpt, e.g., the NIC router, the huge device-driver efforts, the GUI-stack improvements, our custom microcode update mechanism, the software packaging and deployment, and the work on the file-system and networking stacks. The bottom line of the Year of Sculpt is that Sculpt OS has become a surprisingly versatile and robust system. It can be deployed in a few seconds by booting from USB, runs as day-to-day OS on almost all of our laptops, its mechanisms for installing and updating software from packages have become a second nature, and it continues to inspire us to explore new application areas. Even outside of Genode Labs, there is a small and enthusiastic user base. Besides Sculpt, we set forth a number of other goals one year ago. :The transition from NOVA to our custom kernel and seL4: is ongoing but the topic received less attention than originally planned. This has two reasons. First, Alexander Boettcher's excellent maintenance and gradual improvement of NOVA keeps us hooked. Over the past year, there has been not much incentive of actual Sculpt users to move away from NOVA. Second, there is renewed interest in NOVA beyond our use of the kernel. Most specifically, we started joining forces with [https://cyberus-technology.de - Cyberus Technology] to improve NOVA together. That's fantastic! This development notwithstanding, we still follow our ambition to bring the support for the other kernels like seL4 on par with NOVA to give Genode users the ultimate choice. Speaking of seL4, throughout the year, we have continuously adapted Genode to the kernel's upstream development and enjoy the informal collaboration with seL4 developer community. That said, the seL4 version of Genode still remains a side activity with no commercial backing. :NXP i.MX: support has become much better, particularly with respect to network support and performance. Our ongoing commitment to the i.MX platform is also fueled by privacy-advocating projects like the Librem phone that are based on the same SoC. :Software quality and resilience: ultimately became the title story of the [https://genode.org/documentation/release-notes/18.11#Raising_the_bar_of_quality_assurance - release 18.11]. We greatly intensified the amount and quality of testing, explored static code analysis, and vastly scaled up the complexity of workloads carried by Genode. :System monitoring, tracing, profiling: remains a somewhat underdeveloped area of Genode. As a step in the right direction, we introduced a simple trace-logging tool. Also, Sculpt's introspection features like the ability to inspect the runtime's state live on the machine make Genode's behavior easier to capture and to understand. But that said, the use of these features remains a black art mastered only by a few. :Java: has found its way into Genode via our port of OpenJDK. Details such as the enabling of the JIT engine on ARM took much more effort than anticipated. We are happy to report that Tomcat works fine. But at the current state, it is still too early to advertise Java as a stable feature. 2019 - Bridging Worlds ###################### We dedicated the year 2018 to prove that Genode scales to general-purpose computing. [https://genode.org/download/sculpt - Sculpt OS] leaves no doubt about that. The logical next step is to make Sculpt OS relevant and appealing for a broader community. During our public road-map [https://lists.genode.org/pipermail/users/2018-December/006517.html - discussion] on our mailing list, we identified three ways towards that goal: # In order to capture the interest of new Genode users, we have to put *emphasis on the practical use* of Genode, not on its technical prowess. With practical use, we refer to both desktop computing and headless scenarios like network appliances and servers. Over the course of 2019, we plan to establish (variations of) Sculpt as an attractive foundation for those application areas, and advance Genode's protocol stacks (storage and encryption come in mind) and hardware support (e.g., ARM 64-bit) accordingly. This will go hand in hand with making Genode easier to discover and to use, describing use cases at a digestible level of detail, and fostering the sense of one community that includes both users and developers. # Since an operating system is only valuable with applications, we have to make the *porting of existing software* and the use of popular *programming languages* a frictionless experience. Besides supporting the reuse of existing software, we should also cultivate the "Genode way" as an option for designing native applications. Such applications can leverage the unique capabilities of the framework, in particular the sandboxing of code at a very fine granularity and the low footprint of raw Genode components. # Because an operating system does not exist in isolation, we must foster Genode's *interoperability* with other systems and applications by speaking widely used protocols and supporting universally expected software-integration features. Milestones for 2019 ################### In the following, we present a rough schedule of the planned work. As usual, it is not set in stone. If you are interested in a particular line of work, please get in touch. February - Release 19.02 ======================== * OpenJDK with JIT on ARM and x86 * Sculpt with support for online package discovery * Showcase of a Genode-based web appliance * Showcase of a multi-port network appliance May - Release 19.05 =================== * Updated "Genode Foundations" book * Tool-chain update and SDK (C++-17, enabling O3 by default, considering GDC) * Headless Sculpt * Pluggable network drivers * Native support for Let's Encrypt certificates * Revisited GUI-related framework interfaces * Sculpt * Improved interactive system composition * Passphrase handling * Clipboard support * Kernel-agnostic virtual-machine monitors * ARM 64-bit August - Release 19.08 ====================== * Interactive tracing tool * Virtualization support for the base-hw kernel on x86 * Library version of the init component * Sculpt * Fine-grained USB-device policies * Interactive depot manager (ability to add/remove software providers) * Configuration of CPU affinities and scheduling priorities * Audio * Showcase of a Sculpt-based network router * VM-based desktop applications (enhanced VM integration features) * Updated Qt5 * Consolidation of the Noux runtime (performance) November - Release 19.11 ======================== * Building Genode packages directly on Sculpt * VNC server support * Sculpt * On-target debugging of components * Shutdown protocol * Block-level encrypted storage * Drag-and-drop protocol