---

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

[ 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.