create new tag
, view all tags
%SECTION{summary}%"Philosophies" isn't quite the right word, I will probably move this page when I find a better word (tenets?). Similarly, programming might be misleading as well, it is not intended to be philosophies about how to program, but maybe what to program.



Free is More Selfish than Open, But That's OK

I kind of want to phrase this (these) as an admission (of a failing?) and then a statement of my intent.

I first noted it somewhere else, but, IMHO, writing free (copylefted) software is more selfish than writing open software.

When people write open software (under a BSD, MIT, or similar license (IIUC) (or dedicated to the public domain)), they give their code away to anybody to use for any purpose, including making a proprietary product which in some sense takes that freedom away from others. That's not a totally accurate statement, the original free code is still free (in whatever sense I meant that), but whatever enhancements were added in the proprietary product are not free (in the same sense of the meaning of free earlier in this sentence).

When I (or others) write copylefted (free) software, we are saying, I'm giving you this to use (almost) any way you want, but I want something in return, I want you to treat any improvement you might make to the software the same way I've treated the original (so, among other things, if you improve it, I get to use the improved version (under the same terms I let you use my original)).

Arguably, the latter is more selfish than the former. And maybe some day I will be unselfish enough to release software under the former, but, for now, I'm content to (plan to) release software under the more selfish GPL.

Aside: People could argue these points with me, and I don't want to say that I'm totally uninterested in "the truth" or the "one right way", but I'm not very interested, and certainly not interested in spending much time on it. If you have "the truth", and if differs from what I think is the truth, and if you can express it to me succinctly in a way that "talks to my head" (I'm thinking that you might quote one paragraph of my philosophy as expressed here, and point out something like a counterexample in say three sentences, not exceeding 60 words (just to give you a ballpark feel), then feel free.

In the meantime, my intention is to release any software I write under the GPL, and, if anybody wants to criticize my decision, I'll confess to them that I do that even though it may be more selfish than simply releasing the software more freely (open source, public domain).

What About My Writings (non-software, or at least, non-programs)

I'm not quite as ready to say that for a number of reasons:

  • This page is intended to record decisions I've made, for various reasons I've not come to the same decision about writing, partly because:
    • Some people seem to make a distinction there, I think I've seen statements where people have planned to release their code freely but earn a living (or attempt to) by writing about it. (Sort of related to software companies making money by services related to the code rather than by selling the code.)
    • I just haven't thought about it as much / hard. TWiki's statement is (paraphrased) that all content belongs to the author. I haven't had a deperate need to change that so far. (And it doesn't say anything about any form of licensing that content.)

Helping on Another Project is Harder, but Worth More (Maybe)

I've thought about this before, but now want to state it sort of for the record (and maybe as an ideal to strive for?) Maybe this page is more on the subject of my programming ideals (goals) than philosophies?

It's tempting to start my own program for whatever I want. In many ways, it's easier (or, maybe, more accurately, the first steps are easier). If I learn a programming language and have familiarty with a problem domain, I can start programming a solution. I may even make quite a bit of progress, and may even fulfill all my goals.

On the other hand, if I want to improve somebody else's program, I need two extra things:

  • knowledge of the programming language the project is written in (this means either learning an additional language (if I don't know it already), or restricting my choice of first programming language to learn to the language that they are using)
  • knowledge of their program (and I'll make a statement without supporting it (have I supported all my other statements?? wink ): there are an infinite number of ways to write a program in a given language to accomplish a given task (and somebody could argue, a vast number of those ways are "wrong" for various reasons, but: (1) wrong programs (approaches) exist (and I probably won't recognize wrong programs (approaches) until I've invested a lot of time in learning "their" programming language and their program), and (2) (oops, already covered) the big investment required before you recognize a wrong program (approach)

But, if you can find a program that is headed in the general direction you want to go, which has a decent approach, etc., etc., etc., your labor to improve that program, despite the extra overhead, may be a more useful contribution than starting your own program.

And, now having written this much, I guess I'd say that my intent will not be to always improve an existing program. It very much depends on all the factors I've mentioned (or not mentioned) so far.

I guess my philosophy will be to intentionally bias myself away from automatically (without much thought) starting a new program and bias myself towards looking at existing programs that might benefit from my (or somebody's capable) help.

Sort of an aside, and I don't have a good example to support it, and therefore I may use the jargon of "crufty" -- a once good program may eventually become not worth improving for various reasons, the code may become too "crufty" to support, or new developments in programming language, technology, or whatever, may make it silly to invest any more effort in the program.

An attempt at an example: are there many situations where it makes sense to write a custom program to do simple spreadsheet type analysis anymore? I would say no, so if you're writing such a program, you're probably doing the wrong thing. I'll admit that there may be some cases where the spreadsheet approach is too cumbersome, but in general, for most spreadsheet type tasks, you are better off using an existing spreadsheet "language" (i.e., program, like Excel, Gnumeric, Kspread, whatever).

Jumping off the deep end, I have the feeling that X is starting to fit into that category (and I zip my lips at this point).

) wink


  • () RandyKramer - 22 Feb 2004
  • If you edit this page: add your name here; move this to the next line; and if you've used a comment marker (your initials in parenthesis), include it before your WikiName.

Revision Comment

  • %DATE% —

Page Ratings

Topic revision: r1 - 2004-02-22 - RandyKramer
  • Learn about TWiki  
  • Download TWiki
This site is powered by the TWiki collaboration platform Powered by PerlCopyright 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WikiLearn? WebBottomBar">Send feedback
See TWiki's New Look