Libre software (blog)

From Organic Design wiki

Friendica[edit]

Posted by Nad on 15 September 2011 at 06:53
This post has the following tags: Libre software
Friendica is a distributed social network application that is decentralised and distributed across different providers. The emphasis of the distribution is on portability, interoperability and federation capability. It contrasts with social network aggregation services, which are used to manage accounts and activities across multiple discrete social networks.

Open standards such as OAuth authorisation, OpenID authentication, OStatus federation, XRD metadata discovery, the Portable Contacts protocol, the Wave Federation Protocol, OpenSocial widget APIs, microformats like XFN and hCard, and Atom web feeds—increasingly referred to together as the Open Stack — are often cited as enabling technologies for distributed social networking.

Friendica is one of the only distributed social projects which has a notion of security and privacy and access control. It isn’t an afterthought. Mistpark was designed from the ground up to support private communications. Nevertheless there are other distributed social projects. A large number of developers from around the globe are working on something known as the “Federated Social Web” – including development teams such as Status.net, Diaspora, OneSocialWeb, SocialRiver, BuddyPress.

At Organic Design we're really keen to get to know Friendica more deeply as it seems to be a really viable alternative to Facebook that's set to become much more popular as Facebook gets more and more fascist. We'd like to start setting different organisations up with Friendica installations and getting them federated together to form diverse distributed groups of activity and knowledge.

Our installation[edit]

There's no need to go into too much detail about installation as Friendica's just a standard LAMP application installation explained in its own self-contained documentation here. but our instllation did involved a little bit of difficulty because of an URL-rewriting conflict, and the fact that we have .htaccess files disabled, so I had to add our own section in our Apache configuration instead.

RewriteCond %{HTTP_HOST} ^friendica\.organicdesign
RewriteRule "(^|/)\.git" - [F]
RewriteCond %{HTTP_HOST} ^friendica\.organicdesign
RewriteCond /var/www/domains/friendica%{REQUEST_FILENAME} !-f
RewriteCond /var/www/domains/friendica%{REQUEST_FILENAME} !-d
RewriteRule (.*?)(/index.html)?$ /friendica/index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
RewriteCond %{HTTP_HOST} ^friendica\.organicdesign
RewriteRule (.*) /friendica$1 [L]


There was one difficult problem which took a while to figure out. The problem was that when the naked domain was requested, the site would load but would have a "page not found" message in the main content area. After talking to some very helpful people in the #friendica freenode IRC channel, I created a log file and enabled maximum logging by adding the following to the .htconfig.php file:

$a->config['system']['debugging'] = true;
$a->config['system']['logfile'] = 'logfile.out';
$a->config['system']['loglevel'] = LOGGER_DEBUG;


Then after going to the naked domain the following error was reported in the log:

index.php: page not found: / ADDRESS: 177.132.110.114 QUERY: q=/index.html


This indicates that the naked domain is somehow resulting in a request filename of index.html, which is strange because our default index file is set to index.php. But this log entry at least shows us a workaround that can be done until the real problem is discovered, which is to simply ignore the /index.html portion of the filename if it exists, which is why the following rule was used in the rewrite configuration:

RewriteRule (.*?)(/index.html)?$ /friendica/index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]


Also, don't forget to add a crontab entry:

*/10 * * * * cd /path/to/codebase; /usr/bin/php include/poller.php

Custom pages[edit]

We've created a few custom pages in our Friendica site. I'm not sure what the official method of adding a domain/pagename page into the site it, but I've done it by creating a file called mod/PAGENAME.php directory with the following format (of course you replace "PAGENAME" with your desired page name):

<?php function PAGENAME_content(&$a) {return '

PLACE PAGE HTML HERE

';}

Note that if you're HTML uses single-quotation marks, they'll need to be preceded by a backslash since the PHP string containing the HTML is delimited with single quotations.

Custom messages and translation[edit]

Unfortunately the internationalisation methodology they've used isn't very intuitive. Here's the process:

  1. Find the string you want to change in the util/messages.po file (you can find it by searching for a keyword)
  2. Copy the msgid content (or get it from the the place in the code mentioned in the comments for that entry)
  3. Edit the view/LANG/strings.php file and add $a->strings["MSGID"] = "NEW CONTENT"; where MSGID is the msgid you copied before

Note that all the message id's are actually the English strings which is very unwieldy, and also means that to make changes to existing English messages requires the initial creation of the view/en/strings.php file since the file will only exist for non-enlgish languages. For more information see /util/README in your Friendica installation.

The Facebook connection[edit]

I've moved this section to Friendica/Facebook connector since it was cluttering up the page a bit.

Friendica plugins developed by Organic Design[edit]

One important aspect of getting to know Friendica more deeply is being able to customise it beyond what it's capable of doing out of the box, so we've started learning about the two kinds of plugins, addons and modules. Addons extend the system by connecting into the various hooks provided by the software such as post-login, save-profile etc, and modules extend it by adding new functionality accessible from the first path component of the URL.

Short Profile Url (has some problems currently)[edit]

I'm setting up a Friendica site for a project I work with who wanted a couple of specific requirements from their social networking platform. Friendica seems to fit all their needs except for these two requirements,

  1. they want users profile pages including contact details to be available from a simple domain/username URL format
  2. they want a specific form containing inputs for Skype, Facebook etc where they enter their contact details

I decide to give the first one a go to start with and created a small addon that accepts the basic format of URL and if there's no module of that name and there is a user of that name, it redirects the browser to that user's profile page with the profile tab selected.

I used the init_1 hook (hooks listed here) which is called early on but after the database is established, to first check if the long format of URL was being requested, and if so redirect to the new short form of URL, and secondly check if the request is for the new short form, and if so, change the local properties of the $a the global App singleton to make it think it was a normal profile request.

Secondly I hooked into the app_menu hook which occurrs after all the page headers have been initialised so I could populate the $a->page['htmlhead'] property with a link to a JavaScript file which uses jQuery to update all profile links in the page to the new format.

The code is in our subversion repository here.

this works fine for doing the short-url redirect, but has problems with the adjustment of in-page links

Simple Details[edit]

Another aspect required for the Friendica project we're working is to have a custom form for entering personal details into the user profile. Many groups using the software don't need all the hundred and one categories of details that come out of the box such as interests, marriage status, music or television taste and yet they often would like to go into more specific detail in some aspects such as contact methods or portfolio links.

Ideally a plugin would be made which allows the site administrators to have complete control over the presentation of the users profile form, but initially I've made a simple version which allows us to create our own specific form adjustments from the plugins code.

The PHP part of the code is very basic and simply hooks into app_menu to add a JavaScript file which does all the form adjustments using jQuery. The JavaScript code is here.

No Email Body[edit]

We want people to have to go into the site to read posts, not to just read them directly from the emailed notifications. This simple addon hooks into the notification events and clears the body part from the emailed message if the notification contains a posted item. The code is in the OD repository here.

Provide Registration Reason[edit]

We need an extra textbox on the registration for users requesting an account to enter their affiliation or reasons for the administrator can base their acceptance/denial of the account on. The content of this textbox needs to be included with the email sent to the administrators.

Title of the box will be "Please describe your affiliation with the Mathaba community or your reasons for wishing to become a member".

This has been done now, it sends a second email to admins with the users registration reason in it. Code is in the OD repo here.

DRFN[edit]

DFRN provides the means for people to conduct online social network activities without requiring a central website (such as MySpace, Facebook, etc.). These web companies quite literally own the personal communications and online friendships of hundreds of millions of people.

Why is this a problem? Because we don’t know that these companies can be trusted to do “the right thing” with our private information – because we aren’t their customers, advertisers are their customers. Our goal is take back our personal relationships and privacy and create an open social web where our communications belong to us.

The DFRN (pronounced dee-fern - Distributed Friends & Relations Network) framework provides the communication basis for a decentralised social network - where cooperating servers share information on your behalf while operating in a web of trust relationships you control. It can provide a “Facebook-like” experience without requiring a central company or server.

The goal of DFRN is to provide an open and distributed social communication platform with server requirements comparable to that of a typical hosted blog. Instead of a central server, a collection of distributed 'cells' or 'nodes' are able to communicate with each other on your behalf.

In recent years, the use of centralised social networks has come under a good deal of scrutiny over privacy and trust issues. The centralised model offers some technical advantages over a distributed network, but at a price of giving up personal control of private communications and data to the central provider.

Zot![edit]

When the team started building Friendika a year ago, there were no computer protocols for privacy-aware social networking on the web. A group of people were trying to build social networking on the "open stack" - which is a set of protocols originally conceived to add capabilities to blogs. But these didn't have any way of handling privacy. Also around that time, the Diaspora project started their own work on a privacy-aware social network and as best as can be determined - tried to find a way to secure the open stack. This protocol has never been formally published.

We set out to build a privacy enhanced social network, and decided that the unique requirements of a decentralised conversational network coupled with privacy issues surrounding member profiles necessitated a new mode of privacy-enhanced communication - and hence a new protocol. We created DFRN to address the short-comings of existing systems.

DFRN works well - but since we started with nothing, we over-engineered the privacy capabilities. This is OK, because it's much better to over-engineer them than to under-engineer them - as we saw happening in similar projects. But we've now had a year to work with DFRN, and we feel we can do it better. We can also do it a lot simpler - which makes it easy for other projects to integrate. Currently Friendika has communication links with many networks, but no other networks have secure communication links with Friendika. We've got a rather high barrier to entry, and that is mostly due to the difficulty in implementing the somewhat unwieldy DFRN protocol.

Zot! is a streamlined privacy protocol for social networking, drawing on all the strengths of DFRN, but reduced down to the bare essentials. We still provide RINO node-node message encryption. We still provide dual authentication of every communication before it is allowed. We still provide seamless remote-login to turn decentralised server nodes into one large but private space - with your own privacy rights extended to the farthest node.

It's just leaner and meaner.

We're re-writing the spec at this moment and this will soon be published - and like DFRN, released publicly and given to the public domain. We feel that the ability to communicate and share privately and securely is so critical to the future of the web that nobody should ever be allowed to own it.

Then we will start working on the Zot! server.

See also[edit]

Cappuccino[edit]

Posted by Nad on 9 September 2011 at 02:21
This post has the following tags: Libre software
Cappuccino is an open source application framework for developing applications that look and feel like the desktop software users are familiar with.

Cappuccino is built on top of standard web technologies like JavaScript, and it implements most of the familiar APIs from GNUstep and Apple's Cocoa frameworks. When you program in Cappuccino, you don't need to concern yourself with the complexities of traditional web technologies like HTML, CSS, or even the DOM. The unpleasantries of building complex cross browser applications are abstracted away for you.

Cappuccino was implemented using a new programming language called Objective-J, which is modelled after Objective-C and built entirely on top of JavaScript. Programs written in Objective-J are interpreted in the client, so no compilation or plugins are required. Objective-J is released alongside Cappuccino in this project and under the LGPL.

Designed for Applications[edit]

Nobody will deny that there is a distinct difference between a web site and a desktop application. Similarly, we believe there is a big difference between a static web page and a full fledged web application. Cappuccino is designed for applications, not web pages.

Instead of doing all or most of the work on the server, Cappuccino applications do as much as possible in the client. A typical application would never reload, but rather send and recieve data using traditional AJAX techniques and then present that data in the client code. 280 Slides is the first Cappuccino application, and it's a showcase of what is possible with this new framework.

Instead of worrying about how to implement drag and drop, copy and paste (of text and objects), undo and redo, document saving, rich cross-browser drawing and graphics, and a slew of other features, developers are free to focus on specific problems like PowerPoint support, or Twitter integration, or whatever else makes their application unique and compelling.

How does Cappuccino Compare to Other Frameworks?[edit]

Cappuccino is not designed for building web sites, or making existing sites more "dynamic". We think these goals are too far removed from those of application development to be served well by a single framework. Projects like Prototype and jQuery are excellent at those tasks, but they are forced by their nature to make compromises which render them ineffective at application development.

On the other end of the existing frameworks are technologies like SproutCore. While SproutCore set out with similar goals to Cappuccino, it takes a distinctly different approach. It still relies on HTML, CSS, JavaScript, Prototype, and an entirely new and unique set of APIs. It also requires special development software and a cumbersome compilation step. We think this is the wrong approach.

With Cappuccino, you don't need to know HTML. You'll never write a line of CSS. You don't ever have interact with DOM. We only ask developers to learn one technology, Objective-J, and one set of APIs. Plus, these technologies are implementations of well known and well understood existing ones. Developers can leverage decades of collective experience to really accelerate the pace of building rich web applications.

If you want to build a rich web application, you need to learn something new. Many people think this will be JavaScript 2, or HTML 5, or some new standard. The problem is, as we've come to realize, standards bodies work too slowly. Cappuccino works right now, not in the theoretical future. Objective-J is essentially JavaScript 2, but available today in every major browser. Because we rely on only the most essential web technologies, improvements are not limited by the pace of browser vendors and standards bodies.

See also[edit]

ØMQ[edit]

Posted by Nad on 9 September 2011 at 02:11
This post has the following tags: Libre software
ØMQ (ZeroMQ, 0MQ, zmq) looks like an embeddable networking library but acts like a concurrency framework. It gives you sockets that carry whole messages across various transports like in-process, inter-process, TCP, and multicast. You can connect sockets N-to-N with patterns like fanout, pub-sub, task distribution, and request-reply. It's fast enough to be the fabric for clustered products. Its asynchronous I/O model gives you scalable multicore applications, built as asynchronous message-processing tasks. It has a score of language APIs and runs on most operating systems. ØMQ is from iMatix and is LGPL open source.

Quotes[edit]

Quote.pngThe best way to get started with ZeroMQ is to work through some hands-on examples - the concepts are not new, but the ease with which you can compose them takes some getting use to.
Ilya Grigorik

Quote.png0MQ sockets being asynchronous means that the timings of the physical connection setup and teardown, reconnect and effective delivery are transparent to the user and organized by 0MQ itself. Further, messages may be queued in the event that a peer is unavailable to receive them.
Brian Buchanan

Quote.pngThe more time I spend with ZeroMQ, the less I can think of a reason I'd ever have to open up a raw TCP or UDP socket, except in extraordinary circumstances, again.
Andrew Cholakian

Quote.png0MQ ("Zero-Em-Queue") is a messaging system that tackles these issues by taking a different approach. Instead of inventing new APIs and complex wire protocols, 0MQ extends the socket API, eliminating the learning curve and allowing a network programmer to master it in a couple of hours. The wire protocols are simplistic, even trivial. Performance matches and often exceeds that of raw sockets.
Martin Lucina and Martin Sustrik

Quote.pngZeroMQ is a messaging library, which allows you to design a complex communication system without much effort.
Nicholas Piël

Quote.pngWhat ZeroMQ does is create an API that looks a lot like sockets, and feels the same, but gives you the messaging styles you actually want. By simply specifying the type of socket when you call zmq_socket you can have multicast, request/reply, and many other styles.
Zed Shaw

See also[edit]

SproutCore[edit]

Posted by Nad on 9 September 2011 at 01:55
This post has the following tags: Libre software
SproutCore.png
SproutCore applications move business logic to the browser so they can respond to your users' taps and clicks immediately, avoiding an agonizing roundtrip across often intermittent network connections.

As web application users go increasingly mobile, applications can no longer depend on reliable connections to a remote server to do the heavy lifting.

At the same time, web browsers continue to radically improve their ability to quickly process data and deliver polished user interfaces—a perfect opportunity to rethink the architecture of modern web applications.

Building web applications with traditional web development techniques is painful. Making sure your HTML is always up-to-date is challenging, and swapping information back and forth with your server can be error-prone.

There is a better way. SproutCore's robust bindings system allows you to create data-centric applications. Just describe the state of your application and how the data flows from your models to your views and let SproutCore do the rest.

Semantic templates allow you to write HTML and CSS that update automatically when your models change—like magic. And an in-memory database lets you intelligently manage and query your data and synchronize with your server.

SproutCore will change the way you think about building applications and surprise you with how little code you have to write.

See also[edit]

WaveMaker[edit]

Posted by Nad on 7 September 2011 at 06:31
This post has the following tags: Libre software
WaveMaker.jpg
WaveMaker (formerly known as ActiveGrid) is an open source software development platform that automates much of the process for creating Java web and cloud applications. WaveMaker provides a visual rapid application development platform and is available as a free open source software download or as a hosted cloud development environment (aka Platform as a Service) running on Amazon EC2.

WaveMaker allows web developers to create Ajax applications. The WaveMaker framework itself integrates Spring, ACEGI, Dojo Toolkit 1.0, authentication, LDAP, ActiveDirectory and POJOs and their products include Visual Ajax Studio for Rich Internet applications development and WaveMaker Rapid Deployment Server for Java application.

Applications generated by WaveMaker community edition are licensed under the Apache license. WaveMaker applications are created using the WaveMaker studio, a WYSIWYG development studio that runs in a browser and enables drag and drop development of web applications following a Model-view-controller architecture. WaveMaker supports RAD for the web, similar to what products like MS Access, PowerBuilder and Lotus Notes provided for client server computing.

WaveMaker applications run in a standard Java server based on Tomcat, the Dojo Toolkit, Spring and Hibernate. Currently, it is supported on Linux, Mac and Windows. WaveMaker has also released a cloud computing version of its 4GL that runs on Amazon EC2.

As an example of the level of complexity of applications that can be built using a WYSIWYG development approach for Ajax applications, the WaveMaker Studio was built using WaveMaker. WaveMaker is meant for use by web developers who prefer visual tools.

See also[edit]

KDE Plasma Desktop[edit]

Posted by Nad on 26 July 2011 at 03:04
This post has the following tags: Libre software
KDE offers an easy to understand desktop environment for your GNU/Linux or UNIX computer.

Ugly widget problem[edit]

This problem is for me the main reason that I've stayed on GNOME, practically everything about KDE I prefer, but this ugly retro "Windows 3.1" widget problem that some applications seem to have is a real show-stopper for me. The strange thing is that the problem only applies to some applications. The desktop environment itself works fine, for example the window menus and task-bar menus are all fine, but some applications don't seem to be picking up on the theme preferences for some reason. You can see the difference in these two screenshots, the first shows the "Dolphin" file-viewer which is working nicely, the second is my Thunderbird email client which is using the wrong font, buttons and icons (click on the images to get the 1:1 view).

KDE-good-fonts.jpg     KDE-bad-fonts.jpg

See also[edit]

GNOME[edit]

Posted by Nad on 8 August 2008 at 08:26
This post has the following tags: Libre software
Legacy.svg Legacy: This article describes a concept that has been superseded in the course of ongoing development on the Organic Design wiki. Please do not develop this any further or base work on this concept, this is only useful for a historic record of work done. You may find a link to the currently used concept or function in this article, if not you can contact the author to find out what has taken the place of this legacy item.


GNOME offers an easy to understand desktop environment for your GNU/Linux or UNIX computer.

GNOME 3[edit]

GNOME3 Screenshot.png

Extensions[edit]

The GNOME Shell extension design is designed to give a high degree of power to the parts of the GNOME interface managed by the shell, such as window management and application launching. It simply loads arbitrary JavaScript and CSS. This gives developers a way to make many kinds of changes and share those changes with others, without having to patch the original source code and recompile it, and somehow distribute the patched code.

Extensions are listed at extensions.gnome.org and can be installed one-click style directly from the site :-) some extensions that I recommend are:

Writing extensions[edit]

Create an initial working extension template using the gnome-shell-extension-tool --create-extension command, then after you change your code, you restart the Gnome shell by pressing ALT+F2, then entering r and pressing Enter. To check for errors and perform other debugging tasks, use the LookingGlass applet which can be started by pressing ALT+F2, then entering lg and pressing Enter, and escape to close it. Use the command global.log("text") in your code to output to the error console which you can view from LookingGlass in the errors tab - not that it doesn't update in real-time.

Installing on Ubuntu 12[edit]

They've now made Unity the default desktop environment which many people find really horrible, to install GNOME do the following:

sudo add-apt-repository ppa:gnome3-team/gnome3
sudo apt-get update
sudo apt-get install gnome-shell

Then log out and select GNOME at the login prompt

Login-select-Gnome-Shell.png

Adding your own apps to the search[edit]

You'll need to create a .desktop file for your application in the ~/.local/share/applications directory with the name of your application as its filename. The content of the file is of the following format:

[Desktop Entry]
Name=My applications name
Comment=My cool application
Exec=/full/path/to/my/app
Icon=/full/path/to/my/app/icon
Terminal=false
Type=Application
StartupNotify=true

Where'd the startup applications applet go?[edit]

It's still the same program which is gnome-session-properties, but for some reason there's no longer a launcher for it - you can make one using the instructions in the previous section if you like, or launch it manually from a terminal window.

See also[edit]

Why software should not have owners[edit]

Posted by Nad on 6 July 2006 at 00:02
This post has the following tags: Libre software
Broom icon.svg The content of this article requires cleaning up to meet OD's quality standards. Check the wiki best practices for guidelines on improving article and categorisation quality.

This document from GNU's philosophy documents by Richard Stallman is completely in alignment with the guiding philosophies of this project, so I've included it here. See www.gnu.org for original and versions other languages. --Nad 12:08, 6 Jul 2006 (NZST)

This essay is published in Free Software, Free Society: The Selected Essays of Richard M. Stallman.



Source: http://www.gnu.org/philosophy/why-free.html

Digital information technology contributes to the world by making it easier to copy and modify information. Computers promise to make this easier for all of us.

Not everyone wants it to be easier. The system of copyright gives software programs "owners", most of whom aim to withhold software's potential benefit from the rest of the public. They would like to be the only ones who can copy and modify the software that we use.

The copyright system grew up with printing - a technology for mass production copying. Copyright fit in well with this technology because it restricted only the mass producers of copies. It did not take freedom away from readers of books. An ordinary reader, who did not own a printing press, could copy books only with pen and ink, and few readers were sued for that.

Digital technology is more flexible than the printing press: when information has digital form, you can easily copy it to share it with others. This very flexibility makes a bad fit with a system like copyright. That's the reason for the increasingly nasty and draconian measures now used to enforce software copyright. Consider these four practices of the Software Publishers Association (SPA):

  • Massive propaganda saying it is wrong to disobey the owners to help your friend.
  • Solicitation for stool pigeons to inform on their coworkers and colleagues.
  • Raids (with police help) on offices and schools, in which people are told they must prove they are innocent of illegal copying.
  • Prosecution (by the US government, at the SPA's request) of people such as MIT's David LaMacchia, not for copying software (he is not accused of copying any), but merely for leaving copying facilities unguarded and failing to censor their use.

All four practices resemble those used in the former Soviet Union, where every copying machine had a guard to prevent forbidden copying, and where individuals had to copy information secretly and pass it from hand to hand as "samizdat". There is of course a difference: the motive for information control in the Soviet Union was political; in the US the motive is profit. But it is the actions that affect us, not the motive. Any attempt to block the sharing of information, no matter why, leads to the same methods and the same harshness.

Owners make several kinds of arguments for giving them the power to control how we use information:

Name calling
Owners use smear words such as "piracy" and "theft", as well as expert terminology such as "intellectual property" and "damage", to suggest a certain line of thinking to the public - a simplistic analogy between programs and physical objects.
Our ideas and intuitions about property for material objects are about whether it is right to take an object away from someone else. They don't directly apply to making a copy of something. But the owners ask us to apply them anyway.
Exaggeration
Owners say that they suffer "harm" or "economic loss" when users copy programs themselves. But the copying has no direct effect on the owner, and it harms no one. The owner can lose only if the person who made the copy would otherwise have paid for one from the owner.
A little thought shows that most such people would not have bought copies. Yet the owners compute their "losses" as if each and every one would have bought a copy. That is exaggeration - to put it kindly.
The law
Owners often describe the current state of the law, and the harsh penalties they can threaten us with. Implicit in this approach is the suggestion that today's law reflects an unquestionable view of morality - yet at the same time, we are urged to regard these penalties as facts of nature that can't be blamed on anyone.
This line of persuasion isn't designed to stand up to critical thinking; it's intended to reinforce a habitual mental pathway.
It's elementary that laws don't decide right and wrong. Every American should know that, forty years ago, it was against the law in many states for a black person to sit in the front of a bus; but only racists would say sitting there was wrong.
Natural rights
Authors often claim a special connection with programs they have written, and go on to assert that, as a result, their desires and interests concerning the program simply outweigh those of anyone else - or even those of the whole rest of the world. (Typically companies, not authors, hold the copyrights on software, but we are expected to ignore this discrepancy.)
To those who propose this as an ethical axiom - the author is more important than you - I can only say that I, a notable software author myself, call it bunk.
But people in general are only likely to feel any sympathy with the natural rights claims for two reasons.
One reason is an overstretched analogy with material objects. When I cook spaghetti, I do object if someone else eats it, because then I cannot eat it. His action hurts me exactly as much as it benefits him; only one of us can eat the spaghetti, so the question is, which? The smallest distinction between us is enough to tip the ethical balance.
But whether you run or change a program I wrote affects you directly and me only indirectly. Whether you give a copy to your friend affects you and your friend much more than it affects me. I shouldn't have the power to tell you not to do these things. No one should.
The second reason is that people have been told that natural rights for authors is the accepted and unquestioned tradition of our society.
As a matter of history, the opposite is true. The idea of natural rights of authors was proposed and decisively rejected when the US Constitution was drawn up. That's why the Constitution only permits a system of copyright and does not require one; that's why it says that copyright must be temporary. It also states that the purpose of copyright is to promote progress - not to reward authors. Copyright does reward authors somewhat, and publishers more, but that is intended as a means of modifying their behavior.
The real established tradition of our society is that copyright cuts into the natural rights of the public - and that this can only be justified for the public's sake.
Economics
The final argument made for having owners of software is that this leads to production of more software.
Unlike the others, this argument at least takes a legitimate approach to the subject. It is based on a valid goal - satisfying the users of software. And it is empirically clear that people will produce more of something if they are well paid for doing so.
But the economic argument has a flaw: it is based on the assumption that the difference is only a matter of how much money we have to pay. It assumes that "production of software" is what we want, whether the software has owners or not.
People readily accept this assumption because it accords with our experiences with material objects. Consider a sandwich, for instance. You might well be able to get an equivalent sandwich either free or for a price. If so, the amount you pay is the only difference. Whether or not you have to buy it, the sandwich has the same taste, the same nutritional value, and in either case you can only eat it once. Whether you get the sandwich from an owner or not cannot directly affect anything but the amount of money you have afterwards.
This is true for any kind of material object - whether or not it has an owner does not directly affect what it is, or what you can do with it if you acquire it.
But if a program has an owner, this very much affects what it is, and what you can do with a copy if you buy one. The difference is not just a matter of money. The system of owners of software encourages software owners to produce something - but not what society really needs. And it causes intangible ethical pollution that affects us all.

What does society need? It needs information that is truly available to its citizens - for example, programs that people can read, fix, adapt, and improve, not just operate. But what software owners typically deliver is a black box that we can't study or change.

Society also needs freedom. When a program has an owner, the users lose freedom to control part of their own lives.

And above all society needs to encourage the spirit of voluntary cooperation in its citizens. When software owners tell us that helping our neighbors in a natural way is "piracy", they pollute our society's civic spirit.

This is why we say that free software is a matter of freedom, not price.

The economic argument for owners is erroneous, but the economic issue is real. Some people write useful software for the pleasure of writing it or for admiration and love; but if we want more software than those people write, we need to raise funds.

For ten years now, free software developers have tried various methods of finding funds, with some success. There's no need to make anyone rich; the median US family income, around $35k, proves to be enough incentive for many jobs that are less satisfying than programming.

For years, until a fellowship made it unnecessary, I made a living from custom enhancements of the free software I had written. Each enhancement was added to the standard released version and thus eventually became available to the general public. Clients paid me so that I would work on the enhancements they wanted, rather than on the features I would otherwise have considered highest priority.

The Free Software Foundation (FSF), a tax-exempt charity for free software development, raises funds by selling GNU CD-ROMs, T-shirts, manuals, and deluxe distributions, (all of which users are free to copy and change), as well as from donations. It now has a staff of five programmers, plus three employees who handle mail orders.

Some free software developers make money by selling support services. Cygnus Support, with around 50 employees [when this article was written], estimates that about 15 per cent of its staff activity is free software development - a respectable percentage for a software company.

Companies including Intel, Motorola, Texas Instruments and Analog Devices have combined to fund the continued development of the free GNU compiler for the language C. Meanwhile, the GNU compiler for the Ada language is being funded by the US Air Force, which believes this is the most cost-effective way to get a high quality compiler. [Air Force funding ended some time ago; the GNU Ada Compiler is now in service, and its maintenance is funded commercially.]

All these examples are small; the free software movement is still small, and still young. But the example of listener-supported radio in this country [the US] shows it's possible to support a large activity without forcing each user to pay.

As a computer user today, you may find yourself using a proprietary (18k characters) program. If your friend asks to make a copy, it would be wrong to refuse. Cooperation is more important than copyright. But underground, closet cooperation does not make for a good society. A person should aspire to live an upright life openly with pride, and this means saying "No" to proprietary software.

You deserve to be able to cooperate openly and freely with other people who use software. You deserve to be able to learn how the software works, and to teach your students with it. You deserve to be able to hire your favourite programmer to fix it when it breaks.

You deserve free software.

[edit]

Posted by Rob on 22 December 2006 at 05:36
This post has the following tags: Libre software

SourceForge[edit]

Posted by Robin Patterson on 6 April 2011 at 13:31
This post has the following tags: Libre software
SourceForge is a website that hosts over 100,000 Open Source projects and facilitates development of code and applications. It has well-developed forum and bug-tracking software.

Quoting from one of its infoboxes: "SourceForge.net provides a variety of services to projects, including a download mirror network, collaborative development tools (like CVS and Subversion), and tools to support discussion and support. These services are provided to projects and their end-users free-of-charge."

On an average day it gets over a million downloads, not all of them for games (though it has some excellent games, such as FreeCol).

External links[edit]


Cone.png This article or section is a stub. Stubs are articles that have not yet received substantial attention from the authors. They are short or insufficient pieces of information and require additions to further increase the article's usefulness. The project values stubs as useful first steps toward complete articles.