One True Path

...For those who wish to be a Master. See below the horizontal line for alternative paths:

Find a graveyard 386 or 586 computer. You can get such a machine for free (or nearly free) at a computer-repair shop or recycling yard. Make sure the machine has a hard disk light -- it's the last vestige of the old days where computer lights lit up a machine room and will be your sole source of feedback of what the OS is doing with your hardware. Your challenge will be to make this machine faster than a modern one for meaningful tasks.

Open up the box. Despite the hardware lines and fancy hardware, you will come to find that inside there is something elegantly simple: a TuringMachine. You could build an equivalent computational device out of a roll of toilet paper, a device to read, translate and write symbols onto each square (cf. SimplestTuringMachine), and a motor that can move the paper back and forth under the head. All of that complexity is solely for speed and your ergonomic biases.

In any case, write down all the hardware in the machine and remove anything you don't need. The fewer the parts, the easier it is for both your hardware and OS. Find the model of your motherboard, CPU, video card, harddrive(s), bus interfaces, RAM type, IRQ pin settings (if any) for all the hardware, and write it all down. Ensure all cables are secure and all cards are seated properly and then put it back together. Use these data to retrieve the technical documents from the manufacturer's website. IRQ's interrupt the CPU with whatever its doing and are limited in number. Different hardware should be on a different IRQs.

Start up your machine and enter the BIOS setup utility. Note the version of your BIOS. Check all settings to ensure that they match your hardware sheet and are at their optimum for performance. Disable hardware you don't need. The BIOS is the "operating system" before the OperatingSystem is loaded.

Install Linux [without the new GNOME] on your machine. Keep a partition of 100MB for DOS/Windows and one for SWAP that is twice the size of your RAM (whose size if found during the memory count at bootup). Command line is going to be your best friend, so consider this before indulging too much in questions about what window manager (Enlightenment, GNOME, KDE, blah blah ) you're going to use. The only thing that matters is X. Customize your GRUB or LILO software configuration for dual-boot and install DOS v3.3 or v5.0 if you can (on your non-linux partition). Windows if you want.

Work from the command line and understand what your computer is doing. Find out the sequence of events that begins the bootup process once you press the power button. It's going to go something like this: At power-on, the BIOS (consisting of permanent, read-only memory) and CPU work together to bootstrap the process of getting all your hardware "online". Get a disassembler which can read memory addresses and translate into assembly code or find the assembly code of your BIOS chip and figure out at which point does the core or "kernel" of your operating system actually start. Yeah, you're going to have to find books for these. Do it. Do it until you understand the relationship between the hardware and the bits that just exist on the page.

When you see the difference between the kernel and the rest of the operating system running in UserSpace, customize your kernel and compile it to your exact hardware. You can find procedures under the linux HOWTO's. This is called treating your hardware well. You want to be tight: you can't do that with the generic kernel.

Find what programs/daemons are started after boot. Understand what they do. Remove everything you don't need or use. Check your free memory to see how much progress you're making with each removal ("ps" and "top" are your friends), so you can get a sense of how intensive various tasks are. This is called respecting memory. No one's impressed by hogging core.

Now you are worthy of programming the computer. First learn C (gcc on linux). C translates into computer code quite cleanly. You don't have to suffer through assembly anymore. Your OperatingSystem is written in it. Make a program to list 100k prime numbers starting from 2, then make one that doesn't output anything, only computes. Learn to use a ProfilerTool, so you understand what makes good code (from the hardware point of view) and what doesn't and what costs CPU time (screen I/O, for example) and what doesn't. These tools are readily and freely available. Use them, they will train your mind not to be mediocre. The computer gives you unbiased feedback -- there's no bullshit.

Read up on the history and evolution of the operating system, so you know what questions have been asked and answered. Revamp the assumptions for the Internet era, where TheNetworkIsTheComputer: for ex., you don't need to rely on big hard-drives because the internet provides what you need on hand. Replace your hard disk with a 1Gb flash drive and you've just improved the performance of your system by >1000x.

Tasks to consider:

Now: move to a high-level language so you can be rapidly productive. Save shell scripting for file-system traversals and system administration. Choose Python or Perl for higher-level tasks; no one really knows what to do with the power of the computer when coupled with the power of the network. Like cavemen, they've seen everything as a "nail" and the computer as the "hammer": number crunching and business accounting. But we'll be using the elegance of the machine for something more. Eventually, you're going to use a high-level InterpretedLanguage because you need to experiment with ideas -- any optimization at this point is premature. Besides, you've followed the path to this point and know not to casually waste resources, right?

Ultimately, you will find, that inside the mystery of the box, there is something ultimately simple. A simple computer has been made with TinkerToys? that can play TicTacToe[1]. The apparent complexity of the hardware was only to optimize performance and make I/O be insanely fast.

Following the One True Path will prevent going the way of the many lost souls who went the way of JavaScript.

Then, ...find me, I will teach you from there.

Towards building the PerfectSystem,

MasterOfTheMachine

[1] See http://www.retrothing.com/2006/12/the_tinkertoy_c.html, http://www.rci.rutgers.edu/~cfs/472_html/Intro/TinkertoyComputer/TinkerToy.html


An alternative (or addendum) to the above method(s), is this:

In any case, after you assemble your great pieces of hardware and have gotten linux optimized well (compiled and tuned it to your machine), here's what next:

For that, finally, you need the GlassBeadGame.


Note how new Linux distros want 1Gb RAM -- that's called bloatware. It's ridiculous, no real functionality has been added to Linux for 10 years. 386 and 4Mb should be the baseline.


Or skip all that and get a RaspberryPi and/or some Arduinos, and build something good. You'll learn more faster, and at probably less cost and far more satisfyingly than trying to keep rubbishy old anaesthetised-snail slow PCs working between hardware failures.

That would be great, if the energy of the universe for manufacturing new computers were infinite and not shipping containers FULL of old computers available for free. Then the issue you still have is what are you going to be doing with these new computers? You're still doing all the same useless stuff you were before, still on the same plateau.

Huh? The old computers get stripped down, their raw materials recycled and turned into new computers. You can do everything on a RaspberryPi you'd do on an old computer, but with less frustration and less power consumption and it's a lot easier to create or obtain new SD card images than re-image a hard drive. You can do things on an Arduino that would be painful on any PC, and you'll learn a lot about coding on the metal.

I'm not saying that RaspberryPi isn't cool, it's just that no one knows what to do with it. I do. But to get there, you're going to have to follow the path. And getting a old machine to do what you want is all you need. For now, if you want to do something with the Raspberry, help the FreedomBox? association.

Really? No one knows what to do with the RaspberryPi but you? I'm sure all the people doing things with their Arduinos and Pis and Beaglebones -- which they clearly enjoy and find interesting -- would be delighted to hear that from you, and I've no question they'll immediately stop doing what they're doing to follow you unquestioningly. I'm so glad you're our new messiah! The old ones were getting tiresome.

Are these RaspberryPi users following the OneTruePath or are they implementing tutorials they read in Make magazine? To talk about the ease of downloading SD card images is to miss the point here.

Some users are far more hardcore than your OneTruePath (you don't mean it seriously, do you? I thought it was meant to be kind of a romantically wistful joke, a gently-humorous idealistic nostalgia for an era of close-to-the-metal enlightenment that never was.) They code their Arduinos and Pis purely in assembly language.

Here's the thing. I'm an advocate of HackerSpaces? and the maker movement. But without better leadership, it leads to the same old (false) economy. I'm not saying don't experiment, I'm saying that reaching for power is like going for fool's gold, and going for flexibility will give you so much freedom, that you'll waste your energy on small LocalMaxima? which won't take you out of the current paradigm. But, hey, keep listening to your current masters, perhaps then I can go to sleep for a long long time.

Isn't "leadership", better or otherwise, the antithesis of HackerSpaces? and the maker movement?

Not really. It's a misconception. Without leadership, at some level, one can't teach anything for example.


In this order, see also: AllDataRelatesToOtherData, ConfusedComputerScience, UnifiedDataModel, GlassBeadGame, LanguageIsAnOs, PangaiaProject, and then you are helping the Internet embody the WikiNature.


Alternative to the above: It has been rumored that finishing NetHack and retrieving the Amulet of Yendor will also bring one to Enlightenment.


??? - t

When I read it, in my head I heard the soundtrack from TheMatrix.

Nice.


"You don't have to suffer through assembly anymore."

Do not listen to the seductive lies of the materialists. Assembly language is fun. Learn it and learn the truth: there is no "C", there is no "Java"; there is only a stream of machine instructions. There is no One True Path. There is no Path.

Ha! A master after me own 'eart. But that is all the aesthetic of the '70s, pre-modems. Here in the Internet Age, we are swimming in data, and we need an organizing force to make something beautiful. Besides, I think your letting on a little hyperbole... ;^)

{Excellent. That "organizing force" shall be the mighty triumvirate of Lisp, Haskell, and Prolog. And if they are the government of the State of Data, SQL will probably be its civil service. By the way, modems have been around since the 1920s and extensively used since the late 1950s. It's been an interconnected, networked, data-oriented world for a lot longer than you appear to think.}


CategoryPhilosophy CategoryHumor


SeptemberThirteen


EditText of this page (last edited December 22, 2014) or FindPage with title or text search