Oops, I stayed out of bed for too long, again. Anyway, I had days of illness and enough hacking mood to do something. NetBSD® pkgsrc® works on MirOS now, and I ported over their svis(3) and OpenBSDs sdiff(1). I just wonder why I always have to fix their bugs…
Nah, I have no intent in reviving this wlog, just ranting once.
I should write more often. That said, I am in the middle of the period of my diploma examinations. So far, everything went really well—in the TOEIC (Test of English for International Communication) for example, I scored 985 out of 990.
Some MirOS-related news: I actually added a feature to MirLibtool: code for treating -Wl,--library-after, our equivalent to -idirafter for include files. I was surprised that libtool itself is quite readable code. One disadvantage of my patch: The library-after parameter is written into the .la file; older libtools trying to link against the file might barf with an "unhandled library argument" error message. This is not an issue inside MirPorts but could be an obstacle against including it upstream.
I am currently doing a bulk build of all packages on schaaf (a hopelessly slow 667MHz VIA C3). Doing a bulk build is very easy. You need to do the following things:
- Start on a freshly installed MirOS system with plenty of space on the hard disk. Set up MirPorts via make setup.
- Set some variables we need via export BIN_PACKAGES=Yes TRUST_PACKAGES=Yes BULK=Yes BATCH=Yes.
- Go to /usr/ports and create a Logs directory.
- In /usr/ports, run the command mmake -k package clean 2>&1 | perl /usr/ports/infrastructure/scripts/portslogger /usr/ports/Logs.
- Wait a few days for the build to be over. Note that make -k is needed to skip ports that don't build. Some of those will have a bulk cookie and a package file that is 0 bytes.
- Now comes the fun (?) part: check the build log of all packages that failed to build. Start with the packages with 0 bytes.
Update: I had to cancel the bulk build as the machine was running too hot.
This wlog entry was written on the flight from Dresden to Stuttgart. Flying is great: While it would take me about eight hours using so-called high-speed trains, the flight is only 50 minutes!
So we are in 2007 now. 23c3 is over. It was fun, even if tg@ did not manage to come. My security-related highlight was the talk "A not so smart card", where it was shown how trivial it is to duplicate a Swiss PostCard or a French Carte Bleue so that your clone will accept any PIN (they called it a "yes card"). As a user of a Carte Bleue, I frankly found it very unsettling. At least they don't use 384-bit RSA any more, as the Swiss still do. All in all, I attended a lot of talks. I also fixed a few bugs in the pkgtools and ported Gtk+ 2.10 along with dependencies. There are lots of circular dependencies lurking in the shadows there.
Great thanks to Pascal Bleser from FOSDEM for building SuSE packages of mksh(1). Benny already says, in a few years people won't talk about me as "the MirBSD man" any more but as "the mksh developer". And he kind of likes the shell, he admits, even though he prefers that Plan 9 shell called rc. He says the other *nix shells aren't really in active development anyway and only add bload (for example zmodload). I do invest quite some time in mksh, and it stays a scripting shell, but with good interactive usability.
And a rant: X11 doesn't do everything right. Even that old venerable Windows® 3.1 did do mouse-keyboard event serialisation right. When the system is under load and I type into an xterm and press the middle mouse button in between, the mouse lags. Seriously, quite a lot.
An update to the wlog entry of two days ago: I found out that gcc is not entirely consistently with the const qualifier and a means to cast it away: define a union with two slots – a const void * and a void * one… maybe required for const-correctness, because some of the interfaces (such as execve(2)) suck, but it is NOT an excuse for bad code, so don't you ever use it unless impossible AND guaranteed.
I did upload a St. Martin snapshot to unixforge (you can download it here), but there isn't a changelog yet, that's why it wasn't announced. Just so you know.
I spent eight hours in the train today, one more than planned. I had 20 minutes for changing trains but mine was 22 minutes late. Tough luck.
I was going to rewrite the dependency handling stuff in the pkgtools but I had to clean up the convoluted mess that is pkg_do() in pkg_add. The function contained more than 500 lines of code. I did some refactoring: the automatic loading of dependencies is now done in separate functions. I think recursive autoloading via ftp is broken but we don't have binary packages on ftp anyway. However, recording of dependencies is now handled much more sanely. Before, the tools did two passes over the plist: one for checking the dependencies and one for recording them. Wildcards were newly expanded each time so you could not be sure you record the dependency on the same package you checked earlier.
For the user, there should be no functional change. pkg_add now creates a $LOCALBASE/db/pkg/pkgname/+DEPENDS file, which contains the correct forward dependencies for the package. This file is essentially unused at the moment but will be more important later.
These changes will eventually lead to abandoning the dependency checker in perl. I already got rid of all calls to pkg dependencies check in bsd.port.mk; these can be replaced by calling pkg_info -qe.
(Not commenting on mksh(1) changes here, see the ML.)
Yay, my DSL provider just gave me a static IPv4 address. Too bad, it does cost me a lot! 4.90 € per month plus once to set it up. How? IP addresses must not be paid for, they say. And I don't get to set my reverse DNS. Now, funnily, even their own MTA won't accept mail from me, which it did before, from the dial-up pool addresses.
I'm not allowed to be the first one. FreeBSD® Ports beat me by a mere 16 hours, porting frozen-bubble 2. NetBSD® pkgsrc® hasn't updated from version 1, and OpenBSD ports don't even know what that is (probably they don't read news? I don't care though, as MirPorts work on that too). It doesn't play back the demos (signal 27, SIGPROF, during shelling out to bzcat), and once perl crashed with signal 6 (SIGABRT) for me, but that might just be an overly large memory eater…
On the low-tech side, I fixed more stuff in nroff(1). I like it.
While building with MALLOC_OPTIONS=AFGHPZ I found a bug in perl(1)'s regexp code. While caught using the 'P' option (cf. malloc.conf(5)), I tracked it down to an out-of-bounds write to an array of uint32_ts due to a false estimate of the array size. I however can't seem to fix it. Also, and this sucks, I decided to write iconv(1) and locale(1) but as of now, after trying to hack perl and drinking some Met, can't get my, admittedly lazy, arse to do it.
On the other hand, I fixed more in cap_mkdb(1) and hope that OpenBSD will merge the fixes.
I'm also intending to do a quick utf-8 hack to mksh(1) – utf-8 codeset will make backspace remove entire multibyte sequences. Also, I plan on adding a '-c <charset>' or so flag to the editors in the base system (i.e. ed(1) and vi(1)) so that it'll setlocale(3), then if nl_langinfo(3) CODESET replies something different iconv(3) between em (need to take latin1 fallback for 'C' locale into account, discuss the issue on mailing list first).
bsiegert@ has phone, yet no 'net, at home now. Yay!
Actually I won't implement the conversion routine for the editors as I found that it's much easier to just open a pipe to iconv(1), which I added (written myself) today. locale(1) was taken from TNF though.
Note to self: read operator(7) throughoutly, especially the priority level of the ?: ternary operator.
The BOSng Duo has struck again, old fun in a new location, and I found my second cache rather easily.