Linux Today: Linux News On Internet Time.
Search Linux Today
Linux News Sections:  Developer -  High Performance -  Infrastructure -  IT Management -  Security -  Storage -
Linux Today Navigation
LT Home
Contribute
Contribute
Link to Us
Linux Jobs


Top White Papers

More on LinuxToday


Linux and Free Software: The Power to Innovate on the Desktop

Sep 02, 1999, 15:26 (6 Talkback[s])
(Other stories by Paul Ferris)

[ The opinions expressed by authors on Linux Today are their own. They speak only for themselves and not for Linux Today. ]

By Paul Ferris, Staff Writer

There is a lot of talk in the media about innovation. The Internet is to them an Innovation (of course, a couple of decades ago, it was). The World-Wide-Web is to them an innovation, and of course, the WWW is an innovation on top of an innovation.

Here's my take on why Linux is an innovative tool. I'll start with a small example to illustrate a desktop innovation.

I like to have complete and total control of my environment. Linux gives me the power to invent new ways to do things in an incredibly short amount of time. Often without even using a compiler - the software is pretty wide open if you spend the time to get to know your way around.

Let me give you a very small example. I'd like to have my Point-To-Point interface be active while I'm at the keyboard. There's an option in the PPP setup to keep the connection alive if it's in use, but it's not good enough. My connection drops almost constantly with short values, and with longer values of say 20 minutes, one of my programs would keep the connection open almost constantly.

So, I thought about it and decided that what I wanted was for the PPP program to be able to just know when I was using my computer and not go down.

Of course, it doesn't have that option. I read the man pages on the PPP daemon, and it's not there. Here is a brief section of the options:

Usage: /usr/sbin/pppd [ options ], where options are:
        <device>        Communicate over the named device
        <speed>         Set the baud rate to <speed>
        <loc>:<rem>     Set the local and/or remote interface IP
                        addresses.  Either one may be omitted.
        asyncmap <n>    Set the desired async map to hex <n>
        auth            Require authentication from peer
        connect <p>     Invoke shell command <p> to set up the serial line
        crtscts         Use hardware RTS/CTS flow control
        defaultroute    Add default route through interface
        file <f>        Take options from file <f>
        modem           Use modem control lines
        mru <n>         Set MRU value to <n> for negotiation

I was hoping there would be one that said "keepaliveifsomeoneisworkingatthekeyboard".

Odd, it wasn't there. Guess I'll just have to give up, right?

No!, I'm using Linux, remember? Not a biggie at all. The trick is that there's a file in /proc called "interrupts". That's a dynamic file generated by the kernel that displays hardware interrupts that the various devices in my system have generated. For example, every key-press generates a couple of interrupts, and the values in this "file" change.

It's not a real file, it's kind of like you can look at it like a file, but it's really a special place that the kernel can report information, and I can get to it.

let's look at the first few lines of /proc/interrupts:

           CPU0       CPU1       
  0:   42653706   46657503    IO-APIC-edge  timer
  1:     397534     404379    IO-APIC-edge  keyboard
  2:          0          0          XT-PIC  cascade
  3:    3172691    3178407    IO-APIC-edge  serial
  5:     189890     190969    IO-APIC-edge  soundblaster
 12:    2206458    2192422    IO-APIC-edge  PS/2 Mouse

It's rather obvious at this point that I've got a dual-cpu system, and that each processor has a count for the number of interrupts generated. If you would like to watch the values change dynamically, and without any special programming (if you don't count the script I'm about to show), you can do it this way [key this in in a bash term window]:

while :
do
        sleep 1
        tput cup 0 0
        cat /proc/interrupts
done

Every second the screen will repaint and you will see the new interrupt values appear. The keyboard and the PS/2 Mouse interrupts (1 and 12) are the ones I'm interested in. Move the mouse around a bit, and watch the values for your interrupts (either on a serial line, or a PS/2 Mouse line - your interrupts for your mouse will vary). You press control/c [both CONTROL and C at the same time] to stop the program.

I simply watch them for change, and inside of a given interval I can just ping an IP address with a count of 1: ping -c 1 IP 2>&1 > /dev/null. In other words, what happens to the ping is not important, I don't care about the output of the command, I just want it to go out there and ping some address and do it just one time, to keep the interface active. The -c 1 says do it one time. The 2>&1 after that says to tie error output and regular output together into one stream, and the > /dev/null says "throw the text of this command into the bit bucket". /dev/null is the Unix equivalent to a black hole, only the time compression and incredible mass are missing. Things just go in and *poof*, they disappear. I'm sure that this is where a lot of the promises that Microsoft has made to us over the years have gone.

Anyway, getting back to the program itself. I spent more time writing this little description of it than I did the actual program. Without a compiler, and with very little effort on my part, I now have my home computer just knowing that when I sit down and get to typing or moving my mouse that it's time to connect to the Internet. It keeps the connection live constantly until I get up. After that it gracefully lets the PPP daemon terminate the connection because it's not in use.

Innovative? Ok, somebody out there is bound to say: "Oh, that's just trivial, I could have done that with Windows, etc, etc". I'll wager that if you could write it with Windows, you would either have to write it in a higher level language than the shell, or that it would take you a lot longer than 45 minutes and that it would be far more involved. Notice also, that if I want it to become active on some other hardware value that it's hardly any work at all to implement that as well.

Everyone has their examples, this is just one of mine. I'm including the program with this article so that you can see that it's fairly trivial. A few bytes of code and my computer now does something that I'd like it to do. The real truth here though is that there are several levels of innovation. If the Linux kernel didn't make these values available I could get to that level as well. I would have to study fairly hard and learn more about kernel structures, but it could be done.

With Windows I'd have to hope to be inside Microsoft to get to that level. I'd be screwed as far as my idea is concerned. I'd have to hope that they would make this information available or write some new utility that did what I wanted. This is a major point, and a bonus for Free Software and Linux. With the code itself in hand, the innovation is possible in all places - not just with the folks that cobbled the thing together.

That's the difference between innovation and Innovation(tm). When I use the latter term I'm referring to some other method that involves watching the market for new ideas and simply grafting them onto a product in the most haphazard method possible.

Real innovation is taking place daily on the Linux desktop. It's happening on the design side, but even more importantly it's happening at the user side for some people. True, there are some people who just want to be able to launch a card playing program or a word processor or their email. These people don't need innovative tools to do their job.

But someday they just might advance a stage or two and if those tools are gone from their operating system they will not get to the next level. They might just give up too. Maybe they will think it's impossible to get there.

Even if the odds are 100 to 1 of this ever happening, couldn't we use that kind of expertise in our user base? If there are 10 million computer users out there, that would give us 10,000,000/100 or 100,000 more innovative souls. Yeah, I don't have the real statistics, but we've had a drought recently. The desktop tools for higher learning have been pretty lame for a good portion of the population.

Let's hope that Linux does get to the desktop. Especially for children learning computing for the first time. Children can be exposed to these concepts early, and even if they don't use them right away the idea that they are there will be embedded in their minds at an early time. Later as they get deeper in the usage stages of computer technology they won't feel helpless. They will know that there are deeper levels and that they can get there with some work and education.

There's the true possibility for innovation. When someone asks for the right to innovate, remember that with Linux, they already have this power. They don't need to ask for it, it's there. A little more learning is all that's required. Everyone can play, not just individuals that have huge amounts of money at their disposal.

Yes, my example of innovation is trivial, but it has a point. If I only had a proprietary operating experience, likely I would have just had to put up with what was there. The "dialog box" didn't have the option I needed - oh well. Not so with Linux.

With Linux, I have choice. I have freedom. With Linux and Free Software, I can innovate daily on the desktop.

Paul Ferris is a Unix/Linux systems engineer for an international value added reseller in the Northern Ohio region of the U.S. His computer expertise spans over 13 years of Unix, VMS, and various PC operating systems. An avid Linux supporter and fan, he has helped support Linux since 1995. His passtimes include being a husband and a father, Linux, science fiction, metaphysics, spirituality and classic automobiles.