Freedom for Whom?

blog entry posted by lalo (Lalo Martins) on 2008-09-24 16:50:00

Tags:

I think I've seen this argument for the first time in a Slashdot comment, years ago. I've since adopted it, refined it, and used it a lot myself; but now in light of the Android release, I think it's worth mentioning again.

The big problem I see with “Open Source” is that there are, in fact, two groups there. Fortunately the same is not true of Free Software, but even our arguing that it's about freedom still doesn't help... well, read on.

The thing with “Open Source” is: who is it open to?

Arguably, Open Source, as a vague, undefined thing, has existed for decades. But as a conscious, named movement with its own marketing, it spun off from the Free Software movement in the late 1990s, after the “open-sourcing” of Mozilla and the publishing of The Cathedral and the Bazaar. (Or, according to some, it spun off a few weeks later, when RMS noticed those guys were talking about something else and split off from the Open Source initiative.) Still, in hindsight, one can say things like the BSDs, and even the original Unix, were done more in the spirit of Open Source than of Free Software.

Now Free Software, with all its GNU/FSF writings, has always been very clear about its goals. We're here for the freedoms of the user. If you get a piece of software, you have a bunch of inalienable rights, rights that aren't being respected by most software, and which we intend to uphold and defend. Nice, eh?

Open Source people, on the other hand, seem to be a little confused about this. It's like watching two madmen (or drunks) arguing, each founding an argument on an entirely different premise. Some, perhaps still in touch with the “origins” of Open Source in the 90s, believe it's about being “open” to the users of the software. Others have adopted the belief (from BSD maybe?) that it's all about “openness” to the developers.

(More importantly, some of them don't realise Free Software ≠ Open Source, and mistakenly argue this in even more confusing terms; like the old fallacy that the GPL, and viral licenses in general, are bad for Free Software because they give “less freedom” than BSD-style licenses. They do, if you're thinking of other developers, who will then have the “freedom” to “steal” my software and use it in their own closed software, and not give back to the project in any way. I don't care the least about those; I'm writing software for the freedom of my users, and those have their freedoms enforced by a viral license. Now are viral licenses bad for Open Source? Honestly, I couldn't care less.)

The Android platform seems to be firmly planted in the latter camp, sadly. (Or maybe not so sadly; I rejoice with every Java-based product that fails.) It's “open”, first and foremost, for handset makers and network operators, and a distant second, to application developers. “Openness” for the end-user doesn't seem to even be a consideration. Now of course, both things are pretty much incompatible; being “open” to the operators means, really, “open” for them to “close” it in whatever ways they want; so yeah, no VOIP.

Oh well. At least I don't need to be conflicted about whether I want an Android device, whether I can stand Java long enough to actually like the OS. Clearly, that won't be a consideration, and OpenMoko — or, if they fail, someone else, probably using LiMo or FSO stacks — will be the mobile phone for me. Eventually :-)

Five Simple Hints For Your Project Website

blog entry posted by lalo (Lalo Martins) on 2006-06-02 14:08:00

Tags:

A Free Software or Open Source project has to have a website, right? Well, no, actually it doesn't; it's perfectly acceptable if there isn't one. But most developers don't seem to think so, and most serious projects have a website, maybe even their own domain.

I don't consider myself any kind of web expert, but I've been a web developer for about ten years, and most of all, I'm a critic user; so I'd like to say a few words about the Free/OSS websphere I've seen.

1. Have the relevant info.

This is probably the easiest one. Here's the list of what the website should say:

  • What is the project; brief explanation required, a separate detailed explanation is a bonus (that's in addition to the brief one, not instead of). If your project is so obscure that people have to understand a few concepts before they can even have an explanation, then write the explanation assuming they do, and sprinkle it liberally with links to Wikipedia or whatever you prefer.
  • Project status. Is it vapourware, usable work-in-progress, stable, abandoned? That's a reasonably important piece of information.
  • Latest release: number (or name) and date, download link(s).
  • Contact info: how to report bugs at least. Maybe you or your community provide some measure of support, maybe not; but at least a channel for reporting bugs is an absolute must. For a more normal project, where to ask questions (mailing list, irc), and how to contribute, are also common.

And the nice-to-haves:

  • Documentation; even if your documentation is very good, mirror it online.
  • Brainstorming area: a wiki or board is great as brewing grounds for ideas which may become documentation.
  • Browseable, searchable bug/defect/TODO database.
  • Marketing area: say why your product is great, dazzle visitors with screenshots or screencasts or code samples or whatever, make them want it.
  • Egotrip area: give some praise to important contributors, including yourself if you wish. That gives people an incentive to contribute.

2. Don't make the news page the front page.

Your site is not a blog. Visitors have no interest whatsoever on knowing that a new version is out, or one of the developers is on vacation, or the lead developer's dog had puppies, if they don't know what your project is yet.

The front page is your introduction card. It's there to catch the visitor's attention. It should start by explaining what the project is, and maybe go on about why it's the best thing since sliced cheese; if your project has good eyecandy, include screenshots; otherwise, try to think of something else flashy and shiny to include.

It's ok to have a box with the latest news somewhere, maybe as a portlet; as long as it's not the dominating element in the page.

If your “site” is a single page, then replace “front page” above with “first section at the top of the page”.

I know many people think the news are the most interesting part; they certainly are for you, since you're already an user and supporter. Returning users can easily bookmark the news page rather than the front page. Even better, provide a syndication feed, so that they don't have to.

3. Design portably, design accessibly.

A website for a Free or Open Source software that only looks right in a non-free browser is an oxymoron. Test it in Gecko (any of them; Firefox, Epyphany, Galeon, Seamonkey, you name it) and in Khtml (either Konqueror or Safari, preferably both if you can have access to a mac).

Before the launch, give it a little go on Opera and Explorer too just in case. If it looks horrible in the proprietary browsers, you may or may not fix it, it's your call; if you don't, then consider adding a “Get Firefox” button. However, make sure your site is navigable with the non-free browsers, even if it looks like last week's leftover sushi in a train crash.

Please consider giving your site a go on a text-only browser too. That is for two reasons:

  • Text-to-speech browsers used by blind or sight-impaired people are very similar to text-only browsers like lynx. If you can figure the site out in lynx, then a blind person will be able to learn about your project. If your project is something that is potentially specially relevant to visually impaired people, then you should probably look up accessibility hints on the web, and try your site on emacs w3 (w3 with emacspeak seems to be the preferred browsing solution for visually impaired true geeks).
  • If your project is something I might want to run on a server, I may sometimes want to find something on your site with links or w3m over ssh. I expect that to be a rather common practise.

A few odder corner cases can be deduced from the above. If your project is something that people might want to use on their phones, make sure it looks decent on phone web browsers; and so on.

Corollary: do not under any circumstances use Flash or some other non-free non-sense like that. Preferably, avoid Java too — most Free Software and Open Source users will have a JVM, but a surprisingly high number of them don't have one in their browsers.

4. Think trough your information paths.

Serious website design includes tracing information paths: what kinds of information or services may visitors be looking for, how do they get there, and how easy it is to discover it.

Of course, doing the full-fledged thing may be too much on what is, for most people, a hobby. But do try to think up a few cases. Pretend you know next to nothing about the project — or even better, ask a friend, your sister, your dad, whatever. See if they click on the right menu items to get to the information they want. If they have to ask you “how do I...”, you're in trouble; specially if it's “cool, but how do I download it?”.

If you're into UI design, think of navigation in your site as an UI (because that is what it is). Feel free to do menus and submenus. If your software has a GUI — specially if it looks good — you may want to make the site look like the software, or resemble it, or reuse elements from its interface that people will remember. For a good example of the latter, see the gaim website (the icons in the main menu are taken from a Gnome icon theme).

5. Simple is fine. Now go write software.

If you whip up a few webpages — and you respect the rules above — then you're fine. Doesn't matter if you don't have a single line of css or javascript, if your site is mostly text, if there's no spiffy or shiny whatsoever. Don't let people convince you otherwise. If it conveys the information you need to convey, and you like it, then use it. Spending too much time on a flashier website will distract you from what you actually intended to do when you started (or joined) the project: write software.

Of course, if someone offers to help, then you can weight that as any other offer for help. Will it end up taking more of your time than you have, or will the contributor be able to handle it mostly alone? Does the contribution add real value? If you're getting a wiki, CMS-like news posting system, syndication, screenshot gallery, or documentation archive, or anything that is actually going to be useful to your users and potential users, then it might be worth the trouble, more so than if it's about a tableless layout or smart ajax menus.

and now a little music.

blog entry posted by lalo (Lalo Martins) on 2006-03-30 11:54:38

Tags:

What is this thing that builds our dreams
yet slips away from us

Who wants to wait forever,
Who wants to wait forever?

This world has only one sweet moment
Who wants to wait forever,
Who wants to wait forever?
Forever is in our way,
But Free Software works today.

...it depends on what results you're trying to achieve.

blog entry posted by lalo (Lalo Martins) on 2005-09-19 13:50:00

Tags:

Tom's comparison between his own commercializing plan post versus Jono Bacon's OpenOffice article strikes me as a perfect example of the two languages that are being spoken these days.

Essentially, Tom says: "the freedom to use, study, improve, and share source code", and then goes on to "The intractability of the stack means that the hard won software freedoms which apply to its source code apply more "on paper" than in practice" , finally proposing to "advance software freedoms, take a worthwhile leadership role in determining the future of personal computing, and earn a profit".

In contrast, Jono goes on about "the responsibility for the suite to help the push to Open Source", "marketing", and "software blessed by the Open Source methodology".

Tom describes the article's plead for more developers and shorter release cycle as "rearranging the deck chairs". From the point of view of Tom's post, it surely is; on the other hand, from the point of view of Jono's article, Tom's post is trying to solve a solved problem.

Maybe I'm still under the effect of dinner with RMS, but this sounds to me like one of those Free Software vs. Open Source things.

Free Software

So, we believe in these fredoms. We are not interested in software that doesn't give us these freedoms. We have reached the "first base" in our goals; we have a complete, usable environment which can be used for our daily activities. Now we need to improve it significantly, and reintroduce innovation (there is a lot of innovation in Free Software, but 99% of the time, it's just catching up with non-free software; the innovation either "doesn't catch", or only "catches" after being copied and modified by non-free software).

On the other hand, we also need money to live.

So how can we go about doing those things, while still making a living, and that without compromising our beliefs?

Open Source Software

So, we have this really cool model for developing software, which is more cost-effective and may result in more reliable software. We have reached the "first base" in our goals, in that we made our model known and trendy; open source software is a serious contender in the server market, and many companies are open-sourcing their products to reap the benefits we claim to exist.

Now what we need to do is get it on the desktop too, so that we can get more market share. Of course, in order to do that, it's essential to be able to interoperate with closed-source software, specially run on closed-source platforms.

So basically, we need to convince everyone who is profiting from this to give some contribution.

Success of Open Source

We measure success - depending on who you ask - by either the number of people using open-source, or by the revenues of companies/projects based on it, or by how much money is saved thanks to it.

Success of Free Software

We measure success in different ways. The success of a tool is measured by its quality (doesn't matter if it has three users in the whole world). The success of the toolchain is measured by our ability to get on with our lives without requiring non-free software. The success of the "movement" is measured by the awareness of people about the software freedoms.

But they are the same software!

The problem here is, while the goals are to some extent incompatible, the software is the same. (Well, not completely, but the overlap is very close to 100%.) Many people writing Free Software or open source don't really care which one they're doing. Many people advocating them don't make a clear distinction.

People or companies who develop open source are usually helping Free Software (often against their will), but can sometimes also be harmful. People or companies who develop Free Software are usually helping open source (often against their will), but can sometimes also be harmful.

Myself, I do Free Software for personal choice, but I'll accept an open-source job if it doesn't require me to do things harmful to Free Software (I am in fact in one such job right now).

What? You want to know if I have a point? Yes, I see, this has already run quite long-winded, I'm sorry. I guess my point is that, well, open-source people should acknowledge the existence of Free Software and pay it a bit more respect; and Free Software people should keep an eye open for the fact that not everyone who is developing the same stuff as you, is doing it with the same goals.

Where I'm Coming From, part II

blog entry posted by lalo (Lalo Martins) on 2005-09-15 08:07:00

Tags:

...and now that you have the history behind it, let me try to put in words my basic point of view on computers.

Let me begin by saying that, as of today (and this has been true for many years), all systems I know about, suck beyond tolerance. And yes, I have used OSX. It sucks too. (By "system", an intentionally vague term, I mean OSes, and GUI environments, the general UI/API paradigms, and so on.) And they are "improving" in the wrong direction - which means, in 5 years, they will probably suck more, but be more shiny about it.

The premise I'll work with is: there is very little limit to what a computer can do. It is essentially, as I realized when I was about 9, a programmable device; the whole point of its existence is to be customized, to do what you want the way you want.

Modern software is more in the business of telling you what you want.

It might be a "monopoly of magic" problem. Programming is potentially easy, at least for small tasks. But if everyone could program, how would "true" programmers make a living? So the big companies, who very much prefer to stay in business, want you to believe that it's a very arcane art, a burden they are taking away from you - and you should pay them for that. That is, IMO, one of the main reasons they are so afraid of Free Software and open source; we take the stance that, instead, programming is accessible to anyone, and that it's best done in groups (community), and worse, that it's fun. That even the small tasks you can learn to do with a few days of study, can be an useful contribution.

Or it might just be laziness.

To me, a computer which is not programmable, or not conveniently programmable, is at least 50% useless. That's why I eventually abandoned my PalmPilot to buy a VR3 on which I could run Python. Incidentally, that's also how, years earlier, I learned about Free Software, GNU, and Linux... after I was forced to abandon OS/2, I went on the net (which was a new thing for me) in search of a good C++ compiler for Windows, and stumbled on djgcc - which had a great page explaining what is Free Software, and a link to GNU. I was hooked.

But most people are content with what is dumped on them by the vendors; most don't even change the windows color schemes.

I guess what I mean is: I want more developers and less end-users. I want to turn all end-users into small-time developers. My dream system is an infinitely customized thing, where "upgrade" implies some revision-control-like operation of figuring out how the new features fit in with your customizations. Where sharing these customizations is routine, and the system itself gives you tools to do that.

(Yes, I know about Squeak. It's an awesome prototype of these concepts. It also suffers from many other problems that make it unusable as an actual system, most of which are off-topic for this article, but most important of all, being locked into a single programming language.)

The only desktop development that made me really excited recently was the OSX Dashboard (or gDesklets). Not that it's incredibly more accessible than writing an app with applescript or pygtk or even pyobjc; just that it encourages more people to try. But seriously, anyone in the audience whose mother masters enough html and javascript to write an actually useful dashboard thingie (or enough python for a gDesklet one) please raise their hands.

Even in the world of Free Software, we're still bound in "their" thinking, the "ball and chain" way, which makes our systems suck as much as "theirs" (in some aspects, less, in others, more, average 0).

We design our apps to be end-user friendly because, well, we want new users. But few, usually young, projects care about newbie developers (bzr comes to mind). We should do both; aim for a clear model that you can actually explain to someone who is doing high school, for well-tested code (so that people who are learning to program can see exactly what breaks the app), for code that an unexperienced programmer (or someone trying to became one) can actually read and understand, for a programmable interface (be it plugin system, client library, scripting system, whatever) that end-users don't need to be afraid of and that will encourage them to actually learn basic programming. For encouraging communities, where newbies know where to post patches and extensions, where those submissions are actually reviewed, often resulting in hints that help the new programmer improve. (Sometimes even, heh, in actually accepting the patch. The quality of submissions should generally improve with the amount of help available and the clarity of the system, until at some point, total newcomers can actually write usable stuff.)

Eventually, when enough people engage in this "meta-refactoring" principle of clear models and understandable systems, when enough users no longer perceive the tools they use as black boxes, I believe we will naturally suffer a few paradigm shifts in the systems as a whole (now I go back to using "system" in the sense I used on the top of the post), which can gradually help them get rid of the suckiness. My pet peeve is getting rid of the concepts of "application" and "process", which are rooted in Multics/Unix ideas from 30 years ago; but another good point, raised by Tom a few days ago, is that we need to outgrow the boundaries between "computers", and the notion that there are a few minimal components a "computer" must have. (The latter is pretty much dead already. You can run Linux (yes, mr. Stallman, I'm referring to the kernel here) on anything that has a cpu and memory.)

It may turn out that we need new languages, too...