Hi "Nobody III" ;-)
Thanks for your reaction! I have some follow-up questions though:
Port files are only necessary to download external code.
Okay, thanks for clearing that up :-)
I'm not sure about your second question. In particular, noux was intended exclusively for ported software. At this point, its main purpose is to emulate the fork() system call. For software that doesn't require that, I'd recommend just using libc instead. Noux also isn't designed for code isolation within a single noux instance, so that might be an issue as well.
Hmm, now I'm a bit confused. I was under the impression that Noux was necessary for a lot more than just fork(), like things as file access and networking as well. For example, at https://genode.org/documentation/release-notes/11.02 it is mentioned that "without the right environment that presents the program the needed UNIX functionality, those [unmodified, recompiled] programs won't do much. This leads us to the Noux execution environment." And also "Currently the Noux execution environment implements the following system calls: getcwd, write, stat, fstat, fcntl, open, close, dirent, fchdir, read, and execve."
Are these functions now implemented in libc and can they work without Noux? In general, could I then recompile any Unix application that doesn't use fork(), and run it as a Genode component?
If not, what would I need to do compile a simple standard-C application that writes some data to a file and then reads from that file?
I do understand that the code isolation is limited to isolation between different Noux instances and not within the application itself. This is fine for our demo, but thanks for pointing it out.
There are plenty of code isolation examples available, and we can help you more if you tell us more about what you're trying to do. Then we can give you much better advice on what libraries and RPC interfaces to use. For example, if you want to separate a login screen's GUI from the password verification and login code, I'd recommend using the Report interface and/or the File_system interface.
I'm currently trying to get existing software (specifically: a Mosquitto broker) to build and run in Genode, so I'm not using the Genode interfaces. However, since the Genode build flow is still a big mystery for me, I was first trying to build and run some basic examples... Hence the above questions.
Kind regards, Wouter