Monthly Archives: August 2012

Linux Future

Some time ago I came across yet another angry discussion[1] about systemd, and have been reading and thinking a great deal about the design of Systemd, and what it says about Linux. I’ve come to realize that the strife in the Linux community is because an active and well-funded group of developers who have been driving the direction of various core components are not building UNIX. They are building some other philosophically divergent system on top of the Linux kernel, with roughly the same relationship to UNIX as Plan9[2]. For convenience I’m going to call the non-UNIX environment they’re building FLOS for the remainder of this post (F since the FreeDesktop.org folks, and their backers in the Fedora project, are driving this, L for the Linux kernel, OS should be self-explanatory). I intend this term to be value-neutral[3].

To me, the core of a UNIX system is a philosophical matter. To quote Mike Gancarz’s The UNIX Philosophy from 1994, UNIX has 9 paramount precepts:

  1. Small is beautiful.
  2. Make each program do one thing well.
  3. Build a prototype as soon as possible.
  4. Choose portability over efficiency.
  5. Store data in flat text files.
  6. Use software leverage to your advantage.
  7. Use shell scripts to increase leverage and portability.
  8. Avoid captive user interfaces.
  9. Make every program a filter.

FLOS is a nearly diametrically opposed design, with design concepts like the following:

  • FLOS avoids scripts, and prefers to split tasks into compiled logic interacting with logic-less configuration files.
  • FLOS prioritizes ease of machine manipulablity over human manipulablity.
  • The components of FLOS communicate over D-Bus rather than sockets and pipes.
  • FLOS is built on a core of monolithic programs which attempt to synergisticly manage multiple complex components.
  • FLOS leverages features specific to Linux and ignores portability.
  • FLOS prefers tightly integrated components to generic solutions.

I’m not sure that this is a bad design, but it is most definitely not UNIX or anything like it. I’ve seen some fairly convincing arguments that the FLOS design philosophy has serious benefits, and there are decades of convincing arguments that abandoning the UNIX way is the path to ruin. Systemd is the big realization of the FLOS design, but many projects, especially FreeDesktop projects, have been working this way for some time. I’m going to pick out a couple examples and talk about them under the fold.

Continue reading

Posted in Computers, DIY, General | Tagged , , | 114 Comments

25!

Once again, a year older and largely unchanged.

I sent out another round of Ph.D. applications, got another round of shitty responses, threw my hands up, and took an offer to stay at UK and do a Ph.D. with the CS department here. The dichotomy between how pleased folks at UK seem to be about keeping me and how little interest I got elsewhere is a bit distressing, but I understand how it happened, and UK has been and continues to be amazingly accommodating, so I can’t complain much.

In the coming semester I’m TAing for CS275 (undergraduate Discrete Math course), which lacks many (by which I mean “all”) of the exciting hands-on aspects of EE281 and EE101, but is sophomores (which are generally my favorite to teach), and is a sufficiently presentation-dependent set of material that it has serious potential to be be rewarding. I was asked about teaching any of several things for ECE again after CS picked me up, because apparently people think I know what I’m doing in front of a classroom, which might have been more fun, but I had already committed, and this will certainly be more broadening.

I amazingly failed to get clear of my MS for another year, largely because the lack of medium-range plan pressure supplanted with a bit of a reddit habit made it easy to avoid cleaning out the remaining not-fun bits – things are mostly written and written up, it’s just a matter of sucking it up and dealing with the last few bits and pieces. As I’m finishing that I’m trying to arrange people and resources to just do a Ph.D.-sized project I’ve had in the back of my head for years …but that is a large separate topic.

In perhaps the only really substantive difference, I’m living alone in an apartment instead of in a house with people I’ve known since high school. I’m enjoying being able to impose order on my entire living space, and the greater opportunity to spend time, as a former housemate was fond of phrasing it, free from the tyranny of pants, but there certainly is less built-in variety.

I’m pleased with the state of my existence – perhaps too pleased in that I’m getting a bit complacent – but I’m not really suffering on any time scale as a result of not being in a hurry, and I’m getting to indulge in all sorts of interesting side projects, so I’m pretty OK with it.

Posted in General, Navel Gazing | Leave a comment

As a fun aside to the previous post, there is a story my parents like to tell from my childhood, which generalizes the kind of permissive learning objects learning computers are an instance of. When I was very little, I … Continue reading

Posted on by pappp | Leave a comment

Learning Computers

Playing with the Raspberry Pi has me thinking about it’s touted promise as an Educational Computer, one of its stated design goals. I actually think about what a good computer for learning about computers should be quite a bit, out of both personal and professional interest, and have been building a list. I hear an older generation talk about their Apple IIs and ZX Spectrums (and occasionally even access to mainframes through parents) as formative experiences, and I’ve come to appreciate that the stream of interesting old computers my parents kept me supplied with as a child were an amazingly formative experience, and one I can never thank them enough for, so it is interesting to think about what will fill this niche for children growing up now.

For the sake of brevity, we’re going to call this kind of computer a “Learning Computer.” My idea of a good learning computer is:

A Real Computer
A good learning computer has to be usable for the same kinds of tasks as contemporary computers, in the same general manner. It can be limited and inferior, but it has to be basically analogous. Little development boards and Microcontrollers and the like usually don’t make it on this point.

Not “The” Computer
A good learning computer will always be a second (or n-th) machine. No one wants to break the computer they use day-to-day, and learning on a machine people depend on restricts one’s ability to really tinker with it. It is especially important to have another machine with which to get help when things go wrong with the one you are tinkering with.

Cheap
A good learning computer will be both cheap enough to be given to or purchased by anyone curious, and cheap enough that the owner isn’t overly afraid of destroying it. This is fundamentally the same issue as the previous point.

Common, but not Ubiquitous
Truly obscure machines will lack documentation or community, so they will be hard to learn with. A good learning computer will be sufficiently widely distributed that there will be resources and a community available for it. Conversely, for truly ubiquitous computers there will be a canned solution for any problem, so one has to go out of your way to learn anything from it. There is even some value in it being a little bit weird, so that the owner can appreciate design distinctions.

Open
You need to be able to reach in and poke around at the software and hardware. Ideally, the entire boot process will be visible, and at least one operating system the hardware will run will be capable of introspection. The level of openness required is negotiable, but an iOS gadget isn’t going to do it.

Flexible
A good learning computer should be able to boot multiple environments, so that the owner can experience a variety of systems, and appreciate what is dictated by the hardware and what is not. It should also have hardware subject to tampering, swapping, and replacement for the same reason. Swappable storage media is especially important on this front.

Programmable
There are few things more powerful than the knowledge that one can make real things. A featureful, accessible programming environment is perhaps the safest, cheapest way of imparting that knowledge.

Just to enumerate how a Raspberry Pi stacks up –
It hosts a variety of environments that look and feel much like a full grown computer, and also is deeply similar to the baby computers / overgrown appliances that have recently become common. It costs $35, and isn’t really pitched as a primary computer. It has already sold enough units to be common, documentation is widely available, and a community has sprung up among the hackers and makers, but it isn’t oversaturated. The default software stack, with some really disheartening holes, is basically open and inspectable. It’s modular via USB and SD cards, and is as accessible as anything with BGA packed parts can be. It is programmable in almost any common language, and many environments floating around for it are tailored to that use.

For the time being it is hard to argue against an old PC, but PCs are increasingly becoming blackboxes that only speak complicated protocols, and older simpler PC hardware is quickly falling out of support even in the hobbyist OSes, which carves a clear niche for a purpose-made learning computer like the Raspberry Pi. It really is very close to the machine the upcoming generation needs as a learning computer, but it remains to be seen how well it will do at reaching the people who will be enriched by it.

Posted in Computers, DIY, General | Tagged | Leave a comment

Raspberry Pi

I finally got my Raspberry Pi yesterday, and wanted to ramble about it for a bit under the fold.
My Raspberry Pi
Continue reading

Posted in Computers, DIY, Electronics, Entertainment, General, Objects | Leave a comment