home development system design Linux databases Docker kubernetes about me contact
Linux

My experience with Linux is extensive. Most everyone uses Linux for servers, both on-site and in the Cloud, and I use it exclusively for development. Here's my introduction to Linux story:

I started serious Unix systems programming in 1986 when I designed a telephone voice message delivery system for AT&T in Holmdel, NJ. It was a distributed network of eleven AT&T SVR4 towers, and I wrote the core of the system software. I also wrote kernel memory management for a Unix SVR3 port with real-time support for Concurrent Computer Corporation, so I'm pretty familiar with Unix internals.

Years later at Bell Labs in Murray Hill, I was given an AT&T 80386 Unix tower, and ordered a large SCSI hard drive and Unix, all AT&T-branded. Turns out, there was no driver for the SCSI drive, so the whole system was worthless as is.

I sent the operating system disks back ($800) and started looking for alternatives. There were several third party licensed versions of Unix SVR4 for the 80386, but they all had serious flaws, according to Usenet groups. I looked into 386BSD, which was very new, but it didn't have SCSI drivers either. It was suggested that I write one myself. Umm, no thanks. Then I looked at Linux, which was at pre-release 0.9-something.

We had a big snowstorm in northern NJ in mid-March, 1993. It was anticipated, so everyone settled in at home for a few days. I had a modem connection to a local facility connected to the Bell Labs network. I downloaded the SLS Linux distribution from an MIT site which took 17 floppy disks, and loaded them on a 386 I had. Soon I not only had a working Unix-like system going, but also XFree86 (after I got the parameters plugged in for my monitor.) I played with it for the next week, and was pleasantly surprised at how solid it was.

When we got back to work in Murray Hill, you can guess what I did with my AT&T tower. Soon I was building "white box" Pentium computers with Linux, and using them for all sorts of things.

The World Wide Web was new at the time, and it seemed everyone at the Labs wanted a server, so I was building them with Mosaic, then Netscape and sometimes Tcl, and writing code for services.

I designed, built and installed a clustered network of 19 Linux rack servers for speech recognition processing, and helped developers with any issues with system calls, inter-process communications, shared memory, semaphores, remote procedure calls, etc.

One project that I was especially happy with was a Linux box with an hardware telephone interface that I designed and built (I'm also an analog circuit designer). We were having problems with voice calls from the UK and Germany, but AT&T's network testing people dismissed them as impossible because their daily tests showed nothing. (Their tests were at low sound volumes, where our problems were at high sound levels.) The problems showed up during trials at Consumer Labs, and I was tasked with getting high quality voice samples. In addition to the hardware, I wrote software to control relays and sound card, which sometimes involved writing to ports in assembler embedded in C code, and shell scripts for a higher level API. I later added remote recording and playback capabilities with DTMF control and voice/modem switching on the same line.

Since then, I've used Linux for just about everything, and especially as a software development environment. I've used many distributions, including Redhat, Debian/Ubuntu, CentOS and others. Currently I use Arch Linux because of the rolling upgrade model, excellent documentation and community support. I used Ubuntu for years, but had problems with major upgrades. Plus, the Ubuntu user community forums aren't much good. It seemed like every Internet search for Linux info led me to an Arch site, so that was a big influence.

Arch Linux is great for my needs as a developer, but for servers and commercial sites Redhat or Ubuntu with long-term support is probably better. Arch kernel upgrades happen at least once a week, and require reboots, plus, though rare, things can break on upgrade. Long-term kernel packages are available with Arch, but software would have to be tested locally before going to production.

If you're wondering where to find Linux help for your projects, I think you're in the right place. Let me know how I can help.