Subject: The Rules of Open-Source Programming

From: Shlomi Fish <[email-masked]>
Date: Sun, 9 Dec 2001 21:42:44 +0200 (IST)

I came up with an idea of writing a list of rules of Open-Source
Programming. Note that I do not intend them to be something like the
Newton's _Three_ Laws of Motion or the Three Laws of Thermodynamics.
Rather, I want it to be something like the Ferengi Rules of Aquisition (
http://www.psiphi.org/DS9/rules.html ) which is a long and entertaining
list of 200 or so rules.

When we are "finished" collecting rules, we can assign them numbers based
on their importance. Then I can make a fortune file out of it.

Here are my achievements so far

* A project is never finished.

* The user is always right.

* Give me refactoring or give me death!

* Always pass NULL for complex options structures, you have nothing
better to put in.

* Never pass NULL for complex options structures, you have nothing
better to put in.

(I'm not so sure about the last two, because they are relevant to
programming in general).

So, please make your own suggestions.

Regards,

	Shlomi Fish

----------------------------------------------------------------------
Shlomi Fish        [email-masked]
Home Page:         http://t2.technion.ac.il/~shlomif/
Home E-mail:       [email-masked]

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: "shlomif3" <[email-masked]>
Date: Sun, 09 Dec 2001 19:51:00 -0000

--- In hackers-il@y..., Shlomi Fish <shlomif@t...> wrote:

> * Give me refactoring or give me death!

A patch:

* Never complain unless you are going to implement it yourself.
:-)

Regards,

	Shlomi Fish

---

From: Alon Altman <[email-masked]>
Date: Sun, 9 Dec 2001 21:51:49 +0200 (IST)

On Sun, 9 Dec 2001, Shlomi Fish wrote:
<
> * A project is never finished.
This is true in so many ways... :)

> * The user is always right.
Actually, the hacker is always right ;) Sometimes, it happens to be the user

> * Always pass NULL for complex options structures, you have nothing
The comma is misplaced - remove it.

> * Never pass NULL for complex options structures, you have nothing
The comma is misplaced - remove it.

  Alon

-- 
This message was sent by Alon Altman ([email-masked]) ICQ:1366540
The RIGHT way to contact me is by e-mail. I am otherwise nonexistent :)
--------------------------------------------------------------------------
There has been an alarming increase in the number of things you know
nothing about.

---

From: mulix <[email-masked]>
Date: Sun, 9 Dec 2001 21:55:58 +0200 (IST)

> * A project is never finished.

that's true in the real world too. no piece of software is ever
finished.

> * The user is always right.

???!?!?!
on a completely related tangent, there's an israeli a.s.r meeting
organizing. if you dont know what a.s.r means, never mind. if you do and
you want to attend, write me - in private.

> * Give me refactoring or give me death!

why? what if it works correctly the first time? or the nth time?

> So, please make your own suggestions.

code talks, bullsh*t walks

put your code where your mouth is

this code is so bad it's not even funny

bsd people are on crack (sorry, nadav, got carried away here ;))

if you like it, let the author know. if you hate it, let the author know
why.

just because the code is open does not mean it isn't a festering pile of
crap.

open source is always better than closed source

closing the source for "security" is like f*cking for virginity

i could probably come up with more, but i better stop here.

mulix, who's studiously avoiding the 'technion sucks. does not. does
too' thread because his mail on the subject might cause an MTA or three
to blush.
-- 
mulix

http://www.pointer.co.il/~mulix/
http://syscalltrack.sf.net/

---

From: Omer Zak <[email-masked]>
Date: Sun, 9 Dec 2001 22:11:15 +0200 (EET)

Good idea!

> http://www.psiphi.org/DS9/rules.html ) which is a long and entertaining

* Don't bother with creation of test cases and test scripts.  Your users
  are your best and your only testers.

* Release early and often.  Clean compilation is optional.

                                             --- Omer
There is no IGLU Cabal.  It is impossible to start one without violating
at least 83% of Shlomi's Rules of Open Source Programming.
WARNING TO SPAMMERS:  at http://www.zak.co.il/spamwarning.html

---

From: Shlomi Fish <[email-masked]>
Date: Sun, 9 Dec 2001 22:15:47 +0200 (IST)

All in all it was quite a rude post, but I think I can extract a few gems
out of this.

> > * The user is always right.

How about "The user is always right unless proved wrong?"

> code talks, bullsh*t walks

I understand what you meant to say here. However, I would paraphrase it if
I were you.

> put your code where your mouth is

That's a variation on your first suggestion. Which is less rude.

> this code is so bad it's not even funny

That may be true for some open-source projects, but not for all. It's also
true for some real-world projects, but again not for all (at least I hope
that not for all).

> bsd people are on crack (sorry, nadav, got carried away here ;))

Skipped. BSD people are open-source hackers as much as Linux hackers are.

> if you like it, let the author know. if you hate it, let the author know

A very good one, added to the collection.

> just because the code is open does not mean it isn't a festering pile of

Please paraphrase:

How about "Open-source is not a panacea. Especially not for the one who
needs to code the wretched thing."

> open source is always better than closed source

I don't think it's very funny. Whether it's true or not is something that
I have serious doubts about.

> closing the source for "security" is like f*cking for virginity

1. It's badly phrased.
2. No-one on his right mind will believe that "security by obscurity"
works.
3. We are talking here about the Open-Source rules. We assume that
properietary software is Shavess (or should I say ChaVeSs).

> i could probably come up with more, but i better stop here.

Next time, please think a little before you write.

Anyway I have a couple more, which I forgot but I'll post later once I
recall them.

> too' thread because his mail on the subject might cause an MTA or three

Actually, my intention for the Image Processing - End of Story thread was
not to start such a thread (although it was probably inevitable). It was
mainly done to keep the list posted with the "happy" resolution of the
subject.

Regards,

	Shlomi Fish

> To unsubscribe from this group, send an email to:
> [email-masked]
>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: Shlomi Fish <[email-masked]>
Date: Sun, 9 Dec 2001 22:20:04 +0200 (IST)

>   are your best and your only testers.

I don't necessary agree here. How about :

* You are your best tester.

* Your users are your second best testers.

* Your test cases and test scripts are your worst testers.

> * Release early and often.  Clean compilation is optional.

Added. But how about s/Release early and often/Release early, release
often./

I have one:

* Backward compatibility is your best friend.

* Backward compatibility is your worst enemy.

Regards,

	Shlomi Fish

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: mulix <[email-masked]>
Date: Sun, 9 Dec 2001 22:28:51 +0200 (IST)

> All in all it was quite a rude post, but I think I can extract a few gems

what can i say, i'm in a rude kind of mood.

> How about "The user is always right unless proved wrong?"

the user is never right, shlomi, unless it's by accident. if you believe
the user is always right, how about this nice little bridge i have here
for sale?

> That's a variation on your first suggestion. Which is less rude.

i am referring, in case it wasn't clear, to the myriad of (l)users who
complain, whine and otherwise annoy the author of the code, without
actually doing something to help.

> true for some real-world projects, but again not for all (at least I hope

god forbid. i wasn't talking about all open source projects, i was
talking about software in general! most code you see, whether open
source or not, sucks.

nevermind, feel free to ignore anything i wrote. i was writing it tongue
in cheek, and i guess i should have added little smilies, or emoticons,
or a huge flag waving in the wind shouting "sarcasm here, beware!!!"

> Skipped. BSD people are open-source hackers as much as Linux hackers are.

check the archive for nadav's post on linus' opinion of bsd hackers.

> A very good one, added to the collection.

why thank you. do i get royalties? no? well, no matter. just make sure
it's gpl'd, and send the groupies up to my hotel room.

> needs to code the wretched thing."

nope. that's not what it means.
here's a little game. go to www.sf.net. pick a project in random.
assuming it has released any code, look at it. rate it, on a 1 to 10
scale.

open source produced some great things. i'm writing this email using a
completly open source system. that does not mean there aren't some open
source projects whose code, how shall i put it? sucks.

> I have serious doubts about.

oh? explain please how closed source can be better, then?

> 2. No-one on his right mind will believe that "security by obscurity"

hah! go read the semi annual flamefests on bugtrack, for and against
full disclosure.

> Next time, please think a little before you write.

no. i think all day. occasionally, i like to just pound the keyboard and
see what comes out.

> mainly done to keep the list posted with the "happy" resolution of the

i'm glad it was resolved to your satisfaction.

-- 
mulix

---

From: Shlomi Fish <[email-masked]>
Date: Sun, 9 Dec 2001 22:57:37 +0200 (IST)

First of all a note: I talked to Muli by cell-phone and he's OK. No need
to be alarmed.

> what can i say, i'm in a rude kind of mood.

That's too bad. I hope you'll feel better tomorrow.

> the user is always right, how about this nice little bridge i have here

I don't need a bridge at the moment. In any case, from my experience with
Freecell Solver I believed that input from its users was a very positive
factor (and that is an understatement). Earlier versions of Freecell
Solver could segfault when given improper command-line arguments. Some
input I received from Dr. Tom Holroyd made me implement a more robust
command line handling. Now, if it segfaults, I know that something is
wrong.

> actually doing something to help.

I think my "Don't complain unless you are going to implement it yourself."
is a funnier (and definitely less rude) variation of it.

> talking about software in general! most code you see, whether open

I could not agree with you more, with as little experience I had with
other people's code. However, some people know how to program well and
that's a fact. But even the best programmers don't write the best code
possible for the first release of a project.

> or a huge flag waving in the wind shouting "sarcasm here, beware!!!"

I think you should calm yourself down a little.

> check the archive for nadav's post on linus' opinion of bsd hackers.

I know that. I realize it was a joke. But sometimes my "instinct" tells me
to take jokes too seriously.

> it's gpl'd, and send the groupies up to my hotel room.

If and when we sell the book "The Rules of Open-Source Programming - The
Book", I promise you will receive at least 10% of the profits.

I'd rethink licensing it under the GPL if I were you, because that may
require to make the entire fortune collection GPL too. How about the FDL
or the Open Publication License?

> source projects whose code, how shall i put it? sucks.

In that case how about "Open code != Well Written Code" ?

> oh? explain please how closed source can be better, then?

No comment.

> hah! go read the semi annual flamefests on bugtrack, for and against

Whatever. Like I said, we assume that closed-source is not an option.

> i'm glad it was resolved to your satisfaction.

Albeit not a complete one...

In any case: did I mention the following rule:

* A project may seem dead, but there's always a small chance that it is
merely slumbering.

Regards,

	Shlomi Fish

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: "Nadav Har'El" <[email-masked]>
Date: Sun, 9 Dec 2001 23:09:40 +0200

> * Backward compatibility is your worst enemy.

I didn't understand most of the "rules of open-source programming" you
wrote, or why you think they are relevant to open-source programming (rather
than any sort of programming), but this pair I don't understand at all...

What sense is there in having two contradicting rules? Does it serve any
purpose, except to instill some sense of nihilism into your list?

Tertium non datur, I say!

-- 
Nadav Har'El                        |      Sunday, Dec  9 2001, 25 Kislev 5762
[email-masked]             |-----------------------------------------
Phone: +972-53-245868, ICQ 13349191 |And now for some feedback:
http://nadav.harel.org.il           |EEEEEEEEEEEEEEEEEEEEEEEEEEE

---

From: "Orna Shemesh" <[email-masked]>
Date: Mon, 10 Dec 2001 13:18:39 +0200

ok, i dont know what a.s.r means, and i want to know. i know that option did
not exist there.
orna.

---

From: "Gilad Ben-Yossef" <[email-masked]>
Date: Mon, 10 Dec 2001 15:05:39 +0200

> ok, i dont know what a.s.r means, and i want to know. i know that 

Aquifer Storage and Recovery?
American Society for Rickettsiology?
Association for the Sociology of Religion?
Association of Student Representatives?
Architects for Social Responsibility?
Auto Shredder Residue?
Arrogant Seers of Rusia?
Atom Soup Rastafarians?
Authenticated Syrian Relics?
Autonomous Syrup Reprogramers?
Association of Suse Roaches?
Armed Siberian Raiders?
Agreeable Sophie Raccoons?
Athletic Synchronous Rappers?
Angry Socialist Rapists?
Apolitical Surreal Reports?
Aviation Surplus Renegades?

OK. Mulix, I think you owe us an answer? ;-)

-- 
Gilad Ben-Yossef <[email-masked]>
Tel: +972(9)9717330 | Fax: +972(9)9717334   | Cel: +972(54)756701
Kagoor Networks ltd | http://www.kagoor.com |

---

From: Shlomi Fish <[email-masked]>
Date: Mon, 10 Dec 2001 16:36:50 +0200 (IST)

> purpose, except to instill some sense of nihilism into your list?

I guess it means we will need to have a sub-project of commenting and
interpreting the Rules of Open-Source Programming<tm>. ;-)

Which reminds me of this addition:

* Every successful project will eventually spawn a sub-project.

In any case, please refer to the original "Rules of Acquisition" (Googlize
it).

The original "Rules of Acquisition" contains two rules:

* War is good for business.

* Peace is good for business.

What I meant was that Backward Compatibility is a two-edged sword. You
can't live with it, but your users can't live without it.

Which we might paraphrase it into this rule:

* Backward Compatibility - you can't live with it, but your users can't
live without it.

> Tertium non datur, I say!

I'm not familiar with this particular latin phrase.

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: Shlomi Fish <[email-masked]>
Date: Mon, 10 Dec 2001 16:41:53 +0200 (IST)

> * Backward Compatibility - you can't live with it, but your users can't

How about :

* Backward Compatibility is the developer's worst enemy.

* Backward Compatibility is the users' best friend.

Now that's not a self-contradictory identification, is it?

Regards,

	Shlomi Fish

There is no IGLU Cabal! The new cabal could not maintain backward
compatibility with the old one, and as a result the user's switched
to "The Old IGLU Cabal - The Next Generation"<tm> which did maintain
backward compatibility.

"Let's suppose you have a table with 2^n cups..."
"Wait a second - is n a natural number?"

---

From: Alon Altman <[email-masked]>
Date: Mon, 10 Dec 2001 16:45:54 +0200 (IST)

> * Peace is good for business.

Hmm... this explains the sh*tty economic situation we are in.

  Alon

-- 
This message was sent by Alon Altman ([email-masked]) ICQ:1366540
The RIGHT way to contact me is by e-mail. I am otherwise nonexistent :)
--------------------------------------------------------------------------
MMM-MM!!  So THIS is BIO-NEBULATION!

---

From: Oleg Goldshmidt <[email-masked]>
Date: 10 Dec 2001 18:16:09 +0200

> * Backward Compatibility is the users' best friend.

I recall the phrase "Backwards compatibility is compatibility done
backwards", but I don't recall either the context or the
attribution...

-- 
Oleg Goldshmidt | [email-masked] 
"If it ain't broken, it has not got enough features yet."

---

From: "Nadav Har'El" <[email-masked]>
Date: Tue, 11 Dec 2001 00:12:33 +0200

> I'm not familiar with this particular latin phrase.

Well, my Latin really sucks, but I think it literally means "the third [is]
not given". It is an axiom of logics that said that something must be either
true or false - it can't be some "third option". You can't have some statement
being both not true and not false.
I think in Hebrew it is usually translated as "hashlishi nimna".

Anyway, I just meant that you can't just start axioms ("rules") that
contradict themselves. Maybe this phrase isn't all that relevant to this
situation after all... Never mind...

-- 
Nadav Har'El                        |     Tuesday, Dec 11 2001, 26 Kislev 5762
[email-masked]             |-----------------------------------------
Phone: +972-53-245868, ICQ 13349191 |It is better to be thought a fool, then
http://nadav.harel.org.il           |to open your mouth and remove all doubt.