First I wanted to say, I've been following Genode for about a year and I'm very excited about its progress.
My question has to do with Noux and how communication is done between processes, and the eventual porting of D-Bus. I'm unsure about just how isolated each noux process is, from other noux processes, and how something like d-bus could share information between running processes.
In addition does each process always execute in it's own noux? and if so how could something like a ps command get information about all running processes? I'm just trying to get a handle of things before jumping in and attempting to port additional components.
Thank you, -J.
Hello,
thanks for the compliment and your interest in Genode!
My question has to do with Noux and how communication is done between processes, and the eventual porting of D-Bus. I'm unsure about just how isolated each noux process is, from other noux processes, and how something like d-bus could share information between running processes.
Noux is a runtime environment that can host one or multiple Unix processes. From such a process' point of view, Noux behaves like a Unix kernel, implementing the typical Unix system calls (open, read, stat, fork, execve, select etc.), a virtual file system (VFS), pipes, and a BSD socket interface. From Genode's point of view, however, a Noux instance is just a normal Genode subsystem. That means, there can be any number of Noux instances running on the same Genode system. By default, each Noux instance is isolated from the rest of the system. However, if the parent component of two Noux instances agrees, those instances can be connected to a shared file system (such as a 'ram_fs' component). This way, they can share information according to the policy of their common parent component.
Noux is primarily meant to execute command-line-based GNU software on Genode. In the designated usage scenario, there exist many Noux instances whereby each instance serves a specific purpose. For example, one instance has the sole purpose of editing source code (it has write access to the source-code directory and comes with a text editor). Another instance has the purpose of executing the tool chain (it has read-only access to the source code, write access to the build directory, and comes with GCC). A third instance is meant to test the binaries (it has no access to the source code, and read-only access to the build system). None of those instances has network access. An instance can be started in fractions of a second on demand, similar to how we are used to starting a shell on a Unix system. But unlike a shell on Unix, which has a global view on the Unix system, a Noux instance can access only those parts of the system that are relevant for its specific purpose.
In addition does each process always execute in it's own noux? and if so how could something like a ps command get information about all running processes? I'm just trying to get a handle of things before jumping in and attempting to port additional components.
On Genode, no ordinary process to obtain information about all running processes. Of course, one Noux instance knows the Unix processes that are running within this particular instance. But for a process running on one instance, there is no way to obtain information about processes running in other Noux instances or about other parts of the Genode system.
I'm curious, what is your intent behind bringing D-Bus to Genode and Noux in particular? Could you share the motivation behind this idea?
Cheers Norman