Contributing to Genode, questions before upstreaming

Hi,

I am reviewing the following document:

One of the key-points is:

create a new topic branch based on the genodelabs/master branch. For example,

 git checkout -b issue76

2 questions:

  • should we target master? or staging instead? I see some evolutions between these branches (as expected) and I am wondering what would be making the merge process easier for the maintainers?
  • the format for branch naming (implied) is the number of the issue, since in my case I am likely going to have multiple of those, would it be ok if I add a more human-readable description, something like fix/issueXX-what_this_topic_is_about ? this would help me keep track more easily.

side note:

  • I have signed the GCA, (and so did Karin, working with me), we attached this onto NYCU email but some of our accounts of github/codeberg may leak our @gmail address instead, will that be ok? (I’ll add a Authored-by trailer in hope you can match them, and will try to be cautious about it though).

Also, would you suggest me to create a first topic on this discouse forum first, before starting an issue on github or codeberg to discuss? or go straight for the issue and keep the convo there?

I am hoping asking questions about the process is ok based on the last piece:

Please do not take the steps described herein too seriously. They are not carved in stone. If you have suggestions for improving them, or if you feel staggered by all those rules, please let us know.

Let me know your thoughts :slight_smile:

Developments should target the main branch. We will ask for a rebase to staging if required during the review process.

Feel free to name your branches according to your gusto.

As this is the Genode Users it exists mainly for discussing user related matters. Almost all technical discussions with strong relations to the implementation happen in the issue tracker (now on Codeberg).

Oh… my bad, I thought that was the point of the ā€œDeveloper’s Cornerā€ ^^;

alright then, let me rebase my work on master and start the upstreaming process, small things first, bigger next :slight_smile:

I have been wondering what’s the stance / plan for BT support in Genode - I didn’t see it mentioned on the roadmap. Or is it a non-goal?

1 Like

Nobody voiced any interest into Bluetooth yet, if this is what you refer to by BT.

I’m interested in it also. I guess all we need is to ā€œjustā€ port bluez for that :thinking:

If you’re eager to accept this challenge, I suggest to start with porting Linux usbbt.ko to virt_linux DDE (or any other BT device driver). The user stack itself is IMO the second, more complex task.

Is there a particular reason to prefer BlueZ over BTstack?
BTStack has the smaller code footprint and operates entirely in userspace already. Of course there’s the non-commercial licensing , but if you’re fine with that it would fit seemingly genode better.

I am very interested to follow on this, I’ll need Bluetooth too in our project soon :slight_smile:

Iet me know of your progresses :slight_smile:

As a more general question: Are Genode-programmed drivers completely equal w.r.t. security and other features no matter what micro kernel is used beneath ?

PS: Are there similar approaches for Genode as ā€˜seL4 Device Driver Framework (sDDF)’ linux-in-vm drivers ?

As one data point, I seem to recall not all µ-kernels fully support IOMMU (IO Memory Management Unit) ? That might be outdated knowledge though. But a while back the recommendation was to use a µkernel with full IOMMU support if one was worried about out-of-bounds DMA writes by drivers. I also recall reading that Genode was one of a very few systems that was able to use IOMMU protection, though that might have changed too.

Indeed, it seems like NOVA and the sel4 microkernels support IOMMU, while the others don’t. But would be really nice to get a confirmation / at-a-glance documentation by the Genode team on this. :slight_smile:

As far as I know base-hw also supports IOMMU (or SMMU on ARM) in the core repos/os/src/driver/platform/ have io_mmu.cc for the core, and repos/base-hw/src/core/ contains io_mmu.h

NOVA, seL4 both supports it as you mentioned (dmar.cpp for NOVA, sel4 has arch/x86/kernel/vtd.c for intel, and drivers/smmu/smmuv2.c for the SMMU part - ARM).

Fiasco.OC I couldn’t find any iommu related code, but I may have missed it

1 Like

I tried to come up with the current state (dated on 2026/06/18) for x86:

IOMMU flavor CPU arch NOVA - Genode fork hw seL4 13.0 Fiasco.OC - ~2019 version NOVAe - rel. 26.08
in-kernel support Intel x - x ? x
AMD x - - - -
---------------------------- -------- ----------------- ----- ------------ ------------------ -----------
in-kernel support Intel x - - - -
used by Genode AMD x - - - -
---------------------------- -------- ----------------- ----- ------------ ------------------ -----------
user-mode IOMMU Intel
driver by Genode - DMAr x x x x x
(part of - IRE x x - - -
pc_platform using kernel
driver as used by AMD
Sculpt OS x86) - DMAr x - - - -
using kernel
- IRE x - - - -
using kernel
---------------------------- -------- ----------------- ----- ------------ ------------------ -----------
(platform driver) Intel x - - - -
using kernel
AMD x - - - -
using kernel

Legend:
IRE - Interrupt remapping
DMAr - Direct memory access remapping

NOVAe - FOSDEM 2025 - Celebrating kernel diversity with Genode
seL4 - seL4 Summit 2025 Abstracts | seL4
Demo: Experimental multi kernel Sculpt 25.10 PC image

3 Likes