Contributed by mtu on from the only-where-the-intrepid-dare-to-go dept.
I find it so interesting to learn about the OpenBSD developers. They come from very different parts of the world with very different backgrounds and experiences and yet come together for a common endeavor. Who are these individuals? What brought them to use and develop OpenBSD? What's their educational background and where do they work? You would be surprised to learn the answers to some of these questions. They surprised me, and Philip Guenther (guenther@) was no exception.
I have been to several hackathons now, and this was my third big hackathon after attending c2k6 and c2k8. As such, I have learned that there are a few prominent voices at hackathons that you come to recognize and expect. At c2k10, there was one that I didn't recognize and that was the voice of guenther@. The first thing that I noticed about guenther@ was that he was not shy in expressing his opinions and did so in a very authoritative but never demeaning or condescending fashion. He also chose to sit at the table of Mark Kettenis (kettenis@) and Dale Rahn (drahn@) which is to say, he was not in newbie territory, at least, not if he is sitting with these two giants of the OpenBSD world.
I've met a lot of OpenBSD developers who are pretty high up in their companies. They range from IT Managers to CTOs and guenther@'s title at Sendmail Inc. is Chief Architect. What are upper level managerial types like guenther@ doing hacking on OpenBSD? Well, besides the challenges and fun inherent in doing so, they also know it is one of the best ways to retain their chops, so to speak.
When most are just using laptops, guenther@ is hacking on the most obscure keyboard (Kinesis Advantage) that I have ever seen. You kind of get the impression that anyone who uses what seems to look like a very ergonomic and esoteric keyboard, has to to have the coding ability that goes along with such a beast. However, when you hear guenther@ hacking on it, without looking at the keyboard, you would think that he was using an old style keyboard. It was definitely the loudest keyboard in the room.
guenther@ started using OpenBSD over 12 years ago when he was a sysadmin. After joining Sendmail Inc. in 2000, he started using OpenBSD a lot more. OpenBSD has been his main operating system for work and personal use for some time now. He got his CVS account in January of 2008 and has since worked on threads, signal handling, libc, stdio, ramdisk and locking in the kernel. After knowing this, you get that he was at the right table and with the right crowd of developers. Actually, the table just next to them was just as lively and if not louder with beck@, art@, thib@, oga@ and blambert@ there to keep up the banter. In fact, those two tables were pretty much the source of noise and entertainment for the whole hack room.
Here's what guenther@ had to say about c2k10:
This is part of a long-term project to clean up our include files, in order to speed up compilation, reduce dependencies, reduce namespace leakage, reduce cross-platform inconsistencies, improve standards compliance, and bring about world peace. The steps this time were around <sys/user.h>, which was included by piles of files that didn't really need it and that contained stuff that was no longer used. Deleting the latter bits actually saves some space on the kernel stacks, so they may eventually be able to use fewer pages, saving memory and reducing page faults. Also cleaned up: <sys/timeb.h>, which is ancient compat code.
rdomain/rtable naming cleanup
Back in 4.7 we added the setrdomain() system call to set a process's default routing domain. It occurred to me that it would be useful if 'ps' would have a format keyword to show that, but when I talked with Claudio, Peter, and Reyk, we realized that it was all misnamed:
It's really a default routing *table*, not domain. Claudio is really the one to document this, but in short, routing domains are a layer 2 concept--each interface is bound to a routing domain and packets received on that interface are processed in that domain--while routing tables are a layer 3 concept--each socket is bound to a routing table and packets sent from a socket are routed according to that routing table, and each routing table is 'in' a given routing domain and can only route out the interfaces bound to that routing domain.
So, Claudio spent a big chunk of time creating a huge diff to fix all the naming system calls, socket option, ioctl, command-line options, variables in the kernel, etc. I spent a much smaller chunk of time reviewing his diff-in-progress and suggesting more work for him. ;-) With that in, I now need to update and send out again my diff to add rtable support to 'ps' and 'fstat'.
tedu and I deleted a bunch of the old COMPAT_* options that provided support for binaries from other OSes: BSDOS, HPUX, IBCS2 (Xenix!), M68K4K, OSF1, SUNOS, and ULTRIX. These have been unused and unmaintained for a while and were starting to make other changes harder to make. For example, COMPAT_HPUX was the only thing holding up the shrinking of struct user, while some of the others were making my rthreads hacking harder. procfs is likely to hit the fan on that soon too...
rthreads: kernel structures
With that cleanup out of the way, I spent the last half of the week working on a big diff to change the links between the data-structures that the kernel uses to track processes, threads, process-groups, and sessions so that rthreads can behave correctly when they use calls like fork, wait, and setpgrp. This mostly involves moving stuff from the per-thread structure (struct proc) to the per-process structure (struct process), but the code that works with these links is a bit complicated in some areas, particularly those for process cleanup and tracing (both ktrace and ptrace). Bret and I had tried a few times earlier this year to break this change into smaller chunks by doing only some of the links in a given step, but the relationships are just too intertwined for the intermediate results to be stable. So it's now one big 3000 line diff that I'll be giving to Theo for snapshots shortly...
Dale and I poked at ld.so a bit, keeping each other from getting lost in its tangled net of linked lists. He had a performance improvement for executables with many dependencies that themselves have many dependencies, while I had some cleanup and stubs for future work.
There was also a bunch of other random fixes and discussions, including a 25 year old flaw in the DNS resolver API that makes the obvious way to call them non-portable, some fixes to the libpthread execve wrapper's error case, another bug in the kernel process list locking added just after 4.7, some sysctl ABI stability checks, and cleanup of some ancient unused bits in the plimit and pcred structures.
As you can see, guenther@ has been hard at play in areas of the kernel few dare to touch, let alone have the ability and experience to work there. After having met him, I'm glad that he has got his hands deep inside OpenBSD internals. If you knew nothing about his coding abilities and experience, by meeting him, you would know that he has a way about him that makes you feel that he is the right person for the job. I also got this sense and confirmation after watching him interact with Theo and others. I met a number of new and interesting people at this year's big hackathon and guenther@ was one of those individuals that left a great positive impression on you after meeting him. Thanks Philip!
(Comments are closed)