Friday, June 21, 2013

Linux is faster than Windows

It's not really part of the "open source software & usability" sphere, but I found this ZD Net article very interesting: an anonymous Microsoft developer admits Linux is faster than Windows. While I generally am skeptical of "anonymous" sources, I find this one credible.

The article also highlights the strengths of the open source software model: By working collaboratively in the open source software model, developers resolve issues that a single programmer might find impossible. An open source program can quickly grow from an interesting proof of concept used by only a few developers to a mature, stable application that benefits many general users.

Here are a few snippets from the anonymous developer that I found most insightful:
Granted, occasionally one sees naive people try to make things better. These people almost always fail. ... See, component owners are generally openly hostile to outside patches: If you're a dev, accepting an outside patch makes your lead angry (due to the need to maintain this patch and to justify in shiproom the unplanned design change), makes test angry (because test is on the hook for making sure the change doesn't break anything, and you just made work for them), and PM [project manager] is angry (due to the schedule implications of code churn). There's just no incentive to accept changes from outside your own team. You can always find a reason to say "no", and you have very little incentive to say "yes".
There's also little incentive to create changes in the first place. On linux-kernel, if you improve the performance of directory traversal by a consistent 5 percent, you're praised and thanked. Here, if you do that and you're not on the object manager team, ... your own management doesn't care.
In order for open source software to thrive, it requires excellent and open communication among all its participants. Open communication breaks down barriers, allowing people to collaborate as peers. And communication in several forms is critical to the success of open source software. Through this interchange of ideas, developers work together for rapid and continual improvement.

As the anonymous developer mentions, in open source software projects, developers are congratulated and praised for improvements. Open source communities are generally a meritocracy anyway, where the best ideas rise to the top through peer review and open discussion. However, proprietary software such as Microsoft's tend to operate in a more defensive mode; unplanned changes (even improvements) are not welcome.

It's no surprise that Linux and open source software outpaces Windows in performance. Now we need to do the same with usability and user experience. That's one reason I started this blog, to study and discuss usability in open source software.

Open Communication Leads to Open Source Software

The Internet may be the most significant innovation since movable type. It certainly has changed the way in which people across the world communicate with each other. As early as 1994, when “the Web” was still in its infancy, Harley Hahn and Rick Stout recognized the impact the Internet would have on open communication:
When we connect computers we invariably create something that is much more than the sum of its parts. As we said, the Internet consists of millions of computers and millions of people, but the computers are not important: we use them only to run our programs … What is important is something that we cannot yet understand, the answer to the question: What happens when millions of people gather in a safe place to talk and to share? That is what the Internet is all about and that is what we are just beginning to find out.
In the same way that movable type led to a revolution in printed communication, the Internet started a revolution in open communication. With open communication, we break down barriers, allowing people to collaborate as never before. Thomas Friedman describes the Internet and the World Wide Web as a “flattener,” enabling people around the world to easily communicate with each other:
But if we were really going to make the most of this breakthrough [PC-Windows era], we needed a breakthrough in connectivity—one that would allow each of us to take our digital content and send it anywhere at very little cost, so that others could share it and work on it with us. The “event” that made that happen was actually a coincidence of events that took place in the space of just a few years in the 1990s—the emergence of the Internet … the World Wide Web … and, finally, the spread of the commercial Web browser … This sudden revolution in connectivity constituted a major flattening force.
Speaking at TED2012, entrepreneur and X Prize Foundation creator Peter Diamandis said the Internet bids goodbye to linear thinking. The Internet has moved us from local thinking and linear growth to global communication and exponential expansion. Similarly, technology turns scarcity into abundance. With an Internet made up of peers, everyone is now on equal footing. People of different backgrounds can work together via social networking sites, over email, or with other open communication. And the Internet continues to expand its reach. In less than ten years, Diamandis estimates three billion new minds will participate in a global conversation via the Internet:
But here, here is the biggest force for bringing about a world of abundance. I call it the rising billion. … We just passed the seven billion mark on Earth. And by the way, the biggest protection against a population explosion is making the world educated and healthy. In 2010, we had just short of two billion people online, connected. By 2020, that's going from two billion to five billion Internet users. Three billion new minds who have never been heard from before are connecting to the global conversation.
The open communication afforded by the Internet makes it a Great Innovation Equalizer which enables other technology innovations, such as “open source software.” Generally, open source means that the program’s source code—the computer instructions that define how the program operates—is available for anyone to view and edit. In open source software, developers from around the world come together to work on a computer program, which they then make available for anyone to use, for free. Developers may access the source code, and can modify the code to fix problems or extend the software to do new things. This access to the program’s source code allows programmers to exchange ideas and information, which in turn enables rapid development of enhancements and bug fixes. As open source software advocate Eric S. Raymond comments, “given enough eyeballs, all bugs are shallow.”

By working collaboratively in this model, open source developers resolve issues that a single programmer might find impossible. An open source program can quickly grow from an interesting proof of concept used by only a few developers to a mature, stable application that benefits many general users. Today, many popular computer programs are written under an “open source software” or “free software” license, or based on open source software projects. For example, the Google Chrome and Firefox web browsers are based on the open source Chromium and Mozilla projects, respectively. The Calibre ebook library program is completely open source software, as is the OpenOffice desktop suite, the WordPress blogging platform, and the 7-Zip file archiver.

The open source software community is fond of using the comparison of cathedrals versus bazaars to demonstrate the differences in how proprietary software (“cathedrals”) and open source software (“bazaars”) is developed. This model was coined by open source software evangelist Eric S. Raymond in his 1996 essay, “The Cathedral and the Bazaar.” Raymond’s comparison is simple:
Linux overturned much of what I thought I knew. I had been preaching the Unix gospel of small tools, rapid prototyping and evolutionary programming for years. But I also believed there was a certain critical complexity above which a more centralized, a priori approach was required. I believed that the most important software (operating systems and really large tools like the Emacs programming editor) needed to be built like cathedrals, carefully crafted by individual wizards or small bands of mages working in splendid isolation, with no beta to be released before its time. Linus Torvalds’s style of development—release early and often, delegate everything you can, be open to the point of promiscuity—came as a surprise. No quiet, reverent cathedral-building here—rather, the Linux community seemed to resemble a great babbling bazaar of differing agendas and approaches … out of which a coherent and stable system could seemingly emerge only by a succession of miracles.
Raymond’s is a very concise description of the open source software development model. It also begins to touch on the meritocracy of open source software development: everyone can contribute, but the best ideas and the most talented developers tend to rise to the top. The cathedral/bazaar comparison is interesting because it demonstrates three facets:

  1. It is simple enough to propagate.
  2. It is easy enough for non-technical people to understand.
  3. It is catchy.

Put in its most basic terms, open source software is any software where the users can see the source code. There are remarkably few rules that govern the conditions under which the users can see the code. The Open Source Initiative has attempted to document ten rules that make up the “Open Source Definition.”  While Free Software Foundation founder Richard M. Stallman may disagree with the “open source” terminology in favor of his own “Free Software Definition,” there isn’t a practical, significant difference between the two. The gist of both terms is that anyone may view the source code, and that both the program and its source code may be shared with others. Generally, the Internet community agrees that any software that provides the source code is “open source software.” For the purposes of this article, consider the term “open source software” in this more general definition.

In order for open source software to thrive, it requires excellent and open communication among all its participants. Open communication breaks down barriers, allowing people to collaborate as peers. And communication in several forms is critical to the success of open source software. Through this interchange of ideas, developers work together for rapid and continual improvement. Linux creator Linus Torvalds describes this dependency as a peer-review:
It’s a wrinkle on how academic research has been conducted for years, but one that makes sense on a number of fronts … The theory behind open source is simple … With teams of contributors working in parallel, the results can happen far more speedily and successfully than if the work were being conducted behind closed doors. That’s what we experienced with Linux. Imagine: Instead of a tiny cloistered development team working in secret, you have a monster on your side. Potentially millions of the brightest minds are contributing to a project, and are supported a peer-review process that has no, er, peer.
Most open source software projects use an email list for developer communication. Email is asynchronous communication, where the recipient may not read your message and reply to it for several days. However, email is ubiquitous, and as such is a necessary component in communication that spans the globe.

Aside from email, open source software projects must equip its co-developers or user-developers with a method of collaboration. Developers may discuss possible new features via email, but eventually they will need to contribute those improvements in such a way that other developers can make use of them. This function is generally not performed over email, but rather via a software versioning and revision control system such as Github, Subversion, or the Concurrent Versions System (CVS). Through a revision control system, developers can “check in” new changes to a database, and other developers can merge those edits into their own working versions.

The third communication method in open source software is a bug tracking database. As in traditional software development, no open source software project is perfect, without errors. Geoffrey James pithily summarizes this concept as one humorous tenet in his “Tao of Programming”:
The highest sounds are the hardest to hear.
Going forward is a way to retreat.
Greater talent shows itself late in life.
Even a perfect program still has bugs.
A bug tracking database is often the most effective way for developers to identify broken behavior and prioritize new features. An open source software project cannot improve itself if it cannot identify what it wrong in the software. But to support effective communication between developers, the bug tracking database must support two critical features:

  1. The bug tracking system must be easy to use: entering new bugs, and following existing bugs. If your system is too difficult to use, no one will want to enter new bugs, and problems in your software will remain unfixed.
  2. The bug tracking system must have a strong query capability. If your users and developers cannot look up existing bugs, you'll find your project will get flooded with lots of duplicate bugs.

Email lists, software versioning and revision control systems, and bug tracking databases provide an online method for developers to work together for rapid and continual improvement. Through open communication, everyone can contribute on a level playing field, allowing people to collaborate as never before.  This changes the software development model; change becomes rapid and user-driven.

But the level of interaction necessary to become a driving force, a tipping point in the collaborative model, was impossible before the invention of the Internet. In this way, the Internet becomes a Great Innovation Equalizer. The open communication afforded by the Internet encourages participation and open communication, which fosters innovation. By working collaboratively in the open source software model, developers engage in Raymond’s babbling bazaar of differing agendas and approaches, and fitfully produce a coherent and stable system. Open source software development encourages participation and open communication. But none of this would be possible without the Internet and its ability to connect people and ideas.

Sunday, June 2, 2013

Modifying Xfce

From my last post, I promised to share the steps to reproduce this desktop very soon, for those who are interested. Here are a few notes to get you started:

The "vanilla" Xfce desktop starts up with two panels: The one on top features an application launcher, virtual desktop browser, and desktop functions (clock, wireless network connections, battery indicator, etc). The bottom panel includes launchers for frequently-used programs (terminal, file manager, web browser, etc) and window buttons for currently-running applications.

Since the top panel included the desktop functions, I figured it was easiest to start from that, and delete the second panel. It's a fairly straightforward series of steps to modify the top panel: right-click on the panel, and select Panel → Panel Preferences. Under the "Items" tab, you can add new functions, modify features, or delete unneeded functions. When done, my "Items" list looks like this:

  • Separator
  • Launcher: Chrome
  • Launcher: Firefox
  • Launcher: File Manager
  • Launcher: Terminal
  • Separator
  • Window Buttons
  • Separator
  • Applications Menu
  • Separator
  • Clock
  • Notification Area (external)
  • Action Buttons (external)
  • Separator

It's up to you what programs to include in the launchers. These are meant to be your frequently-used programs. In my case, I do a lot of writing and web design, so I often need a terminal, file manager, and web browsers. Add whatever programs you use most.

Each Separator is transparent, and exists only to provide some visual spacing. Under Window Buttons, turn off "Show button labels." The panel itself is set to 38 pixels high, 1 row, 100% length.

To make the Applications Menu look like the Aura desktop applications menu, turn off "Show button title" and change the icon. Xfce provides a suitable "3x3 grid" icon as Action Icons → view-grid-symbolic.

I prefer to use 12-hour "am/pm" time for time, so I set my clock to use "%l:%M%P" as the custom time format. This displays time as "8:49pm" instead of the European-standard "20:49" format. Similarly, I set the tooltip to use a US-standard format by entering "%A, %B %d %Y" as the custom date format. If you hover your mouse over the clock, Xfce will display "Sunday, June 02 2013" ("%e" will produce the day of the month without the leading zero, but inserts a leading space instead, which looks weird; I have opted for the leading zero instead).

Move the panel to the bottom of the screen, and lock it in place. Delete the second panel.

Finally, I changed the color scheme to be more familiar, and to allow the panel to visually fade into the background, I set the Xfce desktop theme. In the Applications Menu, select Settings → Appearance. In the "Style" tab, select "Bluebird," which gives a nice dark grey with white text. This also changes the window borders to a nice blue (inactive windows are greyed out) which I find more pleasant to work with.

Power users may notice that this desktop doesn't include the virtual desktop browser, which allows you to represent different desktops on one system. For example, you might use one virtual desktop just to run your email program, a second virtual desktop for your web browser, another for your programming editor, and a fourth for other tasks. As you might guess, virtual desktops are often used by programmers and other highly-technical users, but I omitted the virtual desktop browser for the sake of simplicity. If I were to re-add virtual desktops to this, I would likely create a separate "panel" on the right edge of the screen that lets me switch between virtual desktops.