Category Archives: Tech

Macbook Review

Context: As some people know, I have always hated Apple as a company, though I love some of the things they have done for design. However, for all the hype about their design, I have found most of their interfaces confusing.

But all this was based on what I observed from other people using the system. Last week, I had to convince myself to work with Mac for at least a couple of weeks, to be able to collaborate with other designers.

I’m just sharing my experience from the last few days. This is all relative to my past experience with Windows and Ubuntu. Also note that I’m a heavy keyboard-user.

Pluses first – it’s anyway a small list 😉

  • Battery
  • Display sharpness
  • Build quality
  • Keyboard backlight
  • Sound (volume and clarity)
  • Ability to customize keyboard shortcuts for any app

What I found annoying

I’ve just grouped them by the app in which it happened.


  • Hitting Enter renames the file/folder instead of opening it
  • In grid view, pressing right arrow at last item in a row does not go to next row (gets stuck there)
  • Pressing down arrow does nothing if the next row ended before the current column
  • Cmd+Q does not work for Finder alone
  • No way to go back to the last-viewed folder (Alt+Left Arrow in Ubuntu)
  • In the app switcher (Cmd+Tab), Finder is always there, but selecting it does not do anything
  • Normally opening an image (double click) does not let me navigate to next/previous images in the folder (need to open by pressing space)
  • Moving a file/folder from one place to another is painful (there seems to be no shortcut)


  • Keyboard shortcuts to switch to next/previous tab (Cmd+Option+Right/Left Arrow) is cumbersome
  • No way to make a website into a desktop app. So, when I use Slack native app, I cannot add links to Pocket

Window Management

  • Switching between windows of same app vs different apps is different (Cmd+` vs Cmd+Tab)
  • Maximising a window is painful (have to hold two keys and then click on the “+” button)
  • Quitting an app and closing it are different
  • Windows don’t open in full size by default
  • Making a window full-screen moves it to a new workspace. #disorienting


  • Initial setup is more painful than Ubuntu
    • Need to set up Apple ID to use App Store
    • Too many questions at every set up
    • Home folder was not added to sidebar by default
    • Setting profile pic is almost impossible 🙁
  • No Home, End, Page-up, Page-down keys
  • Inkscape does not work out of the box (needs X11)

What does Fitts’s law mean for web apps?

According to Fitts’s law, the time required to move a pointing device to a target is a function of the distance to the target and its size. In simpler words, the closer and larger a target, the faster it is to click on that target.

When I first heard about it, I was really fascinated by the idea, though it sounds rather obvious in hindsight. I wondered what exactly it means for web apps. (If you are new to Fitts’s law, try this interactive demo).

Prime Pixels Not Applicable To Web Apps

One of the inferences of Fitts’s law is that the easiest areas to click on a screen are the corners and edges of the screen, as you can simply throw your cursor in that direction without overshooting.

Corners and edges are prime screen real estate. (Diagrams: smashingmagazine)

Corners and edges are prime screen real estate. (Diagrams: Smashing Magazine)

But, unfortunately this cannot be applied to web apps, as the edges of the web browser are not always the same as the screen’s edges (unless the app is in full-screen mode).

Still, Closer Is Better

Still, there are other things in the UX that could be improved using Fitts’s law. For instance, modals (lightboxes, overlays or whatever) have been a common way of getting user inputs in web apps, probably borrowed from desktop apps. Though they are helpful when the action needs complete focus without distracted by other elements on the page, it’s an overkill for most lightweight actions.


For example, until a few months back, if you tried to rename a Google Doc while editing it, it would open a new modal box.

In older Google Docs, you have to move your mouse so fart to complete the rename action.

In older Google Docs, you have to move your mouse so far to complete the rename action.

As you can see, this is not optimal, as you have to move your mouse from where you clicked on the name to the OK button in the modal (not many people use Keyboard shortcuts, even simple ones like hitting Enter to submit a form).

Thankfully Google has changed this behavior recently and now you can do the renaming right there, in place. This obviously feels much more lightweight and takes less effort from the user — no mouse movement and no extra click to save the changes.

In-place renaming in Google Docs


Another way of avoiding modals — and hence the long mouse movements — is to use simpler UI elements that appear right next to the element that triggered the action.

In Pocket, when you try to delete an article, the confirmation dialog is shown as a lightweight popover that appears right below the delete icon.

Pocket app uses a popover to confirm the delete action, which is much easier to target.

Pocket app uses a popover to confirm the delete action, which is much easier to target.

To understand the benefit, you can compare this against the “Edit tags” UI of the same app. When you click on the tag icon, a modal box appears in the middle of the screen, with just an input box and a submit button. For such a simple form, a modal is an overkill.

Pocket app uses a modal for editing tags, which makes your mouse cursor travel longer than required.

Pocket app uses a modal for editing tags, which makes your mouse cursor travel longer than required.

You could use a popover very similar to Pocket‘s delete confirmation to show this form. Recruiterbox uses a popover-like UI for simple forms, where modal would be an overkill.

Recruiterbox popover form

Final thoughts

I’m seeing more and more places where modals are being replaced with lightweight and closer UIs. However, the legacy probably left by jQueryUI’s Dialogs and carried on by other libraries like Bootstrap is still haunting us in many places.

Even at Recruiterbox, we have been using modals extensively. Only recently did we decide to avoid modals except for a few actions that require richer forms. Hoping to see more things move in this direction.


Redesign website without affecting SEO

At Recruiterbox, one of the things we wanted to do for a long time was to redesign the front website. The site was done in 2012, but within a year or so we realized the design didn’t give the feel of a new-age company (*cough* flat UI *cough*). However, we were busy building new features for the app, and couldn’t get enough time to work on the redesign.

Finally, last year, Girish made an attempt to do the redesign from scratch. All of us were happy with the new design. The work was almost complete, and was ready to be launched in a few days. However, one thing we were very well aware from the beginning was that SEO would take a hit from the revamp. (We had been scoring good on SEO. appears in the first page of results for most of the targeted keywords, especially in the US, which is our primary market). But, towards the completion, we realized that the risk would be too big – SEO has been the biggest channel for sign ups consistently.

So we parked the idea for a while, thinking of revisiting it later. And that revisiting didn’t happen until last month. By then we were sure we didn’t want to disrupt the SEO abruptly. So we came up with a plan to go about it one step at a time, keeping a close eye on analytics for every step we take. This post explains the process step-by-step,

First of all, this is what we wanted to achieve with the redesign:

  • Good typography
  • Responsive design
  • Flat UI
  • Brighter colors

Step 1: Fix typography

This must be pretty straight forward, at least we thought so. We were clear about the choice of font. Proxima Nova is what we have been using for the app, and we wanted to keep it consistent. Undoubtedly, it’s one of the most elegant fonts.

So we just had to get the font from Typekit, include it in the base template and change the font-family in CSS. Simple! But once the changes were deployed, we were shocked to see the Google Pagespeed score drop drastically. One would expect font services like Typekit to serve web fonts as optimally as possible. But it doesn’t seem to come anywhere close to being optimal.

We found a hack to work around this, but we put it in the task list, as we didn’t want to get stuck in rabbit holes slowing down the redesign.

Step 2: Upgrade to Bootstrap 3

We were still using Bootstrap v2.x, so our first step was to upgrade to 3.0, which is responsive by its nature. Thankfully Bootstrap has a nice guide for the upgrade. We hadn’t tweaked the older version too much, so this was simpler than we expected. And this suddenly made almost everything adapt nicely to mobile, except for few adjustments.

Another thing came for free with Bootstrap 3 – flat UI.

Step 3: Change color palette

Many people had told us that the website looked little dull, which was true. The solution clearly lies in the colors. We wanted to make the front site look little more vibrant, with more saturated and contrasting colors.

So we went page after page and changed the styles, also making sure most pages have a “hero unit”.



Recruiterbox homepage before the redesign

Recruiterbox homepage screenshot

The new homepage

As planned, we were monitoring Google Analytics for any noticeable changes in traffic. Other than the usual drop during the holiday season in US, there didn’t seem to be any negative change. In fact, conversion rate started increasing slowly. One interesting thing was that the mobile traffic increased gradually but there was no significant sign up rate in mobile. On the other hand, the sign up rate in desktop had increased considerably. Probably people go back to their desktop to signup after checking out the website in mobile? This was the only likely explanation we could come up with. Also it made sense, Recruiterbox being a B2B product.

Now, after a month since the redesign has been out, with few other UX optimizations (will write about it soon), the signup rate has increased by a whopping 70%!

This post on recruiterbox tech blog:

லெஸ் நடைதாள் மொழி

CSS எனப்படும் விழுதொடர் நடைதாள் மொழி (Cascading Style Sheets) பற்றிப் பலரும் அறிந்திருக்க வாய்ப்பு உண்டு. இணையத்தின் ஆஸ்தானக் குறியீட்டு மொழியாக மீயுரைக் குறியீட்டு மொழி (HTML) விளங்குவதைப் போல, இணையத்தின் ஆஸ்தான ஒப்பனையாளர் நமது CSS தான். மிகவும் எளிமையான மொழிதான் என்றாலும், தனக்கென பல வறையரைகளைக் கொண்டது CSS. எடுத்துக்காட்டாக, இம்மொழியில் மாறிகள் (variables) இல்லை. இணையதளம் பெரிதாக வளரும்போது CSS நிரல்களைப் பராமரிப்பது கடினமாகிவிடலாம். இதுபோன்ற பல குறைபாடுகளைப் போக்கி, அதே நேரம் CSS-ன் எளிமையையும் பாதுகாத்து, இணைய வடிவமைப்பாளர்களின் பணியை எளிதாக்குகிறது  LESS என்னும் நடைதாள் மொழி.

இது CSS-ற்கு பல புதிய வசதிகளைச் சேர்க்கும் ஒரு மேம்பாடுதானே அன்றி, CSS-ற்கான மாற்றுமொழி அல்ல. அதாவது, இதுவரை நீங்கள் எழுதிவந்த CSS எதையும் மாற்றி எழுத வேண்டிய அவசியம் இல்லை. லெஸ் பயன்படுத்த ஒரே ஒரு ஜாவாஸ்க்ரிப்ட் கோப்புதான் தேவை. அதை இங்கே பெற்றுக் கொள்ளலாம்.

இப்போது, கீழ்க்காணும் இரண்டு வரிகளை உங்கள் வலைப்பக்கத்தின் <head>-ல் சேர்க்கவும்:

<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>

இங்கு <link>-ன் rel பண்பு கவனிக்கத்தக்கது. CSS கோப்புகளை இணைப்பதுபோல் அல்லாமல், லெஸ் கோப்பினை இணைக்கும்போது, இறுதியில் /less சேர்க்கவேண்டியது அவசியம். மேலும், லெஸ் கோப்புகளுக்கு அடுத்ததாகவே less.js கோப்பை இணைக்க வேண்டும்.

இப்போது, less.js -ல் உள்ள நிரல் இணைக்கப்பட்ட லெஸ் கோப்புகளைப் CSS-ஆக மாற்றி உலாவியிடம் கொடுக்கும், உலாவி எப்போதும்போல CSS-ஐ கையாளும். மாறாக, வழங்கியிலேயே லெஸ்ஸை CSS-ஆக மாற்றியும் அனுப்பலாம். இது வலை உலாவியின் பழுவைக் குறைப்பதோடு, ஜாவாஸ்க்ரிப்ட் முடக்கப்பட்டிருக்கும் சூழலிலும் வேலை செய்யும். வழங்கியில் லெஸ் நிறுவ NPM (Node Package Manager) தேவை.

மாறிகள் (Variables)

வலைத்களங்களில் color palette எனப்படும் நிறத்தட்டுகள் பயன்படுத்தப்படுவது (ஒன்றுடன் மற்றொன்று இயைந்து அழகாய்த் தோன்றக்கூடிய நிறங்களைத் தேர்ந்தெடுத்து, அந்தக் குறிப்பிட்ட சில நிறங்களை மட்டுமே பயன்படுத்துவது) வழக்கம். இத்தகைய சூழல்களில் அந்த நிறங்களை மாறிகளாகச் சேமித்துக் கொள்வது மிகவும் எளிமையாக இருக்கும். இல்லையெனில் ஒவ்வொரு முறை நிறங்களைப் பயன்படுத்தும்போதும், அவற்றிற்கான அறுபதின்ம (hexadecimal) குறியீடுகளை நினைவில் வைத்துக் கொள்ளவோ காபி-பேஸ்ட் செய்யவோ வேண்டும்.

இதேபோல் வலைப்பக்கத்தின் வடிவமைப்பிலும் குறிப்பிட்ட நீள அகலங்களைப் பயன்படுத்துவது முறை (grids).


@blue:   #049cdb;
@green: #46a546;
@red:    #9d261d;

@gridColumns: 12;
@gridColumnWidth: 60px;
@gridGutterWidth: 20px;

மிக்ஸின்கள் (Mixins)

ஒரு ruleset-ன் விதிகளை இன்னொரு ruleset-ல் பயன்படுத்த வழிசெய்கிறது மிக்ஸின்கள்.


.bordered {
  border-top: 1px solid black;
  border-botton: 1px solid gray;

.someClass {
  /* Some other style */

மிக்ஸின்களைப் பிறமொழிகளில் உள்ள function-களைப் போலவும் பயன்படுத்தலாம். திரும்பத் திரும்பச் செய்யவேண்டிய ஒரே மாதிரியான வேலைகளை இதன்மூலம் எளிதாகச் செய்யலாம்.


.border-radius(@radus: 5px) {
  -webkit-border-radius: @radius;
   -khtml-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;

.someClass {
  /* Some other style */

உள்ளடக்கபட்ட விதிகள் (Nested Rules)

ஒரு CSS-selector-ற்கான விதிகளை எழுதிய பிறகு, அதற்குள் இருக்கும் மற்ற selector-களுக்கான விதிகளைக் குறிப்பிட CSS-ல் கீழ்க்கண்டவாறு எழுதுவோம்.

#header {

#header .logo {

இதை லெஸ்ஸில் இன்னும் எளிதாக எழுதலாம்.

#header {
  .logo {

செயல்பாடுகள் (Operations)

எண்களை மட்டுமல்லாமல் நிறங்களையும் நீள அகலங்களையும் (1px, 2cm போன்றவை) கூட்டல், கழித்தல், பெருக்கல், வகுத்தல் என அனைத்தும் செய்ய முடியும்.


@base_margin: 10px;
@double_margin: @base_margin * 2;

@full_page: 960px;
@half_page: @full_page / 2;

@base_color: #550;
@dark_color: @base_color + #333;

நிறச் செயல்பாடுகள்

நிறங்களை ஒன்றுடன் ஒன்று கூட்டுவதும் கழிப்பதும் மட்டுமில்லாமல், லெஸ் நிறங்களுக்கான கீழ்க்காணும் பயனுள்ள கட்டளைகளையும் நமக்குத் தருகிறது.

lighten(@color, 10%); // a color 10% *lighter* than @color
darken(@color, 10%); // a color 10% *darker* than @color
saturate(@color, 10%); // a color 10% *more* saturated than @color
desaturate(@color, 10%); // a color 10% *less* saturated than @color
fadein(@color, 10%); // a color 10% *less* transparent than @color
fadeout(@color, 10%); // a color 10% *more* transparent than @color
fade(@color, 50%); // @color with 50% transparency
spin(@color, 10); // a color with a 10 degree larger hue than @color
spin(@color, -10); // a color with a 10 degree smaller hue than @color
mix(@color1, @color2); // a mix of @color1 and @color2

ஜாவாஸ்க்ரிப்ட் கட்டளைகள்

ஆம், CSS-க்குள் ஜாவாஸ்க்ரிப்ட் பயன்படுத்த முடியும்.


@string: `'howdy'.toUpperCase()`; /* @string becomes 'HOWDY' */

@string: 'howdy';
@var: ~`'@{string}'.topUpperCase()`; /* becomes 'HOWDY' */

@height = `document.body.clientHeight`;

இன்னும் பல…

இன்னும் பல வசதிகளைத் தருகிறது லெஸ். இதைவிட்டு இன்னும் வெறும் CSS-ஐ பயன்படுத்திக்கொண்டிருந்தால் எவ்வளவு நேரம் வீணாகும் என்பதை யோசியுங்கள். LESS-ஐ கொண்டு உருவாக்கபட்ட படைப்புகளுள் குறிப்பிடத்தக்கது ட்விட்டர் உருவாக்கிய பூட்ஸ்ட்ராப். அதனைப் பயன்படுத்திப் பாருங்கள், லெஸ்ஸின் ஆற்றல் புரியும்.

முக்கியமாக, லெஸ் ஒரு கட்டற்ற மென்பொருள் – அப்பச்சே உரிமத்தோடு வழங்கப்படுகிறது.

வெளி இணைப்புகள்:

ஃபெடோரா – ஒரு மேற்பார்வை

இக்கட்டுரை ஃபெடோரா இணையதளத்தில் உள்ள இந்த ஆங்கில உரையின் மொழிபெயர்ப்பாகும்.

Fedora என்றால் என்ன?

ஃபெடோரா என்பது ஒரு லினக்ஸ் சார்ந்த இயங்குதளம் (உங்கள் கணினியை இயக்கத் தேவையான மென்பொருட்களின் தொகுப்புதான் இயங்குதளம்). மைக்ரோசாஃப்ட் விண்டோஸ்™, மேக் ஓஎஸ் X (Mac OS X™) போன்ற பிற இயங்குதளங்களுடன் சேர்த்தோ அல்லது அவற்றிற்கு மாற்றாகவோ ஃபெடோராவைப் பயன்படுத்தலாம். இதனைப் பயன்படுத்தவும் பிறரிடம் பகிர்ந்துகொள்ளவும் முற்றிலும் இலவசமாகவே கிடைக்கிறது.

ஃபெடோரா ப்ராஜெக்ட் என்பது கட்டற்ற மென்பொருள் ஆர்வலர்களும் அவற்றைப் பயன்படுத்துவோரும், அவற்றை உருவாக்குவோரும் இணைந்த ஓர் உலகளாவிய சமூகம். ஒரு சமூகமாய் வேலை செய்து, கட்டற்ற நிரல்களை உருவாக்குவதிலும் அவற்றைப் பரப்புவதிலும் முன்னோடியாய்த் திகழ்வதே எங்கள் குறிக்கோள். உலகின் மிக நம்பகமான திறமூல மென்பொருள் தொழில்நுட்பங்களை வழங்கும் நிறுவனமான ரெட் ஹேட் (Red Hat) ஃபெடோராவிற்கு நிதியுதவி வழங்கி வருகிறது. கூட்டாக இணைந்து உழைப்பதை ஊக்குவிக்கவும் புதுமையான கட்டற்ற மென்பொருட்கள் உருவாக வழிசெய்யவுமே ரெட் ஹேட் நிறுவனம் ஃபெடோராவிற்கு நிதியுவி செய்கிறது.

ஃபெடோராவை எது தனித்துவப்படுத்துகிறது?

கட்டற்ற மென்பொருட்களின் மதிப்பை நம்பும் நாங்கள், எல்லோரும் பயன்படுத்தவும் பகிர்ந்துகொள்ளவும் வல்ல தீர்வுகளைப் பாதுகாக்கவும் மேம்படுத்தவும் போராடி வருகிறோம். ஃபெடோரா இயங்குதளம் கட்டற்ற மென்பொருட்கள் கொண்டு உருவாக்கப்பட்டது மட்டுமல்ல, அதனை உங்களுக்கு வழங்குவதிலும் முழுக்க முழுக்க கட்டற்ற மென்பொருட்களே பயன்படுத்தப்படுகின்றன. லட்சக்கணக்கான மக்களுக்கு சேவை செய்து வரும் இந்த இணையதளம் கூட கட்டற்ற மென்பொருட்கள் கொண்டு உருவாக்கப்பட்டதுதான்.

மேலும், கூட்டு உழைப்பின் ஆற்றலை நாங்கள் நம்புகிறோம். எங்கள் வல்லுநர்கள் உலகெங்கிலும் உள்ள கட்டற்ற மென்பொருள் பணித்திட்டக் குழுக்களுடன் இணைந்து பணிபுரிகிறார்கள். இக்குழுக்கள் “அப்ஸ்ட்ரீம்” (upstream) என்று அழைக்கப்படுகின்றன. இவர்கள்தான் ஃபெடோராவில் காணப்படும் பெரும்பாலான மென்பொருட்களை உருவாக்குகின்றனர். எங்கள் பணியிலிருந்து எல்லோரும் பலன்பெறவும், ஏற்படும் மேம்பாடுகள் எல்லோருக்கும் மிக விரைவாய்க் கிடைக்கும் வண்ணம் அமையவும் நாங்கள் இவர்களோடு நெருங்கிப் பணியாற்றுகிறோம். இந்தக் குழுக்கள் செல்லும் அதே திசையில் நாங்களும் பணியாற்றுவதன் மூலம், கட்டற்ற மென்பொருட்கள் ஒன்றோடு ஒன்று இணைந்தும் நன்றாகச் செயல்படுவதையும், பயனருக்கு மிகச்சிறந்த அனுபவத்தைத் தருவதையும் உறுதி செய்கிறோம். மேலும் பயனர்களுக்கு மட்டுமின்றி அப்ஸ்ட்ரீம்-க்கும் உதவக்கூடிய மேம்பாடுகளையும் நாங்கள் விரைவாய் கொண்டுவர முடியும்.

கட்டற்ற இயங்குதளம் பற்றிய தங்கள் பார்வையை ஒவ்வொருவரும் தங்கள் விருப்பப்படி செயல்படுத்த அதிகாரம் அளிக்கவேண்டும் என்று நம்புகிறோம். ஃபெடோராவை யார் வேண்டுமானாலும் மாற்றியமைத்து புதிய பெயரில் கூட வெளியிடலாம். அதற்கான மென்பொருட்களை நாங்கள் ஃபெடோராவிலேயே வழங்குகிறோம். சொல்லப்போனால், ரெட்ஹேட் எண்டர்ப்ரைஸ் லினக்ஸ்(RHEL), ஒரு குழந்தைக்கு ஒரு மடிக்கணினித் திட்டத்தின் XO கணினி, க்ரியேட்டிவ் காமன்ஸ்-ன் Live Content DVDகள் எனப்பல வழிப்பொருட்கள் தோன்ற அடித்தளம் அமைத்துக் கொடுத்தது ஃபெடோரா.

ஃபெடோராவின் மைய விழுமங்கள் என்ன?

சுதந்திரம், நண்பர்கள், அம்சங்கள், முதன்மை என்னும் நான்கும் ஃபெடோராவின் மைய விழுமங்கள் ஆகும். அவை கீழே விளக்கபட்டுள்ளன.


கட்டற்ற மென்பொருட்களை முன்னேற்றும் குறிக்கோளை நிறைவேற்ற, நாங்கள் வினியோகிக்கும் மென்பொருட்களைப் பயன்படுத்திக்கொள்ள வேண்டும் என்பது எங்கள் நம்பிக்கை. ஃபெடோராவை முற்றிலும் கட்டற்றதாகவும் எல்லோரும் பகிர்ந்துகொள்ளத் தக்கதாகவும் ஆக்க, தனியுரிம மென்பொருட்களுக்கு இணையான கட்டற்ற மென்பொருள்களை வழங்குகிறோம். ஆகவே, நாங்கள் உருவாக்கியதை யார் வேண்டுமானாலும் தங்கள் சொந்தத் தேவைகளுக்கு எந்தவொரு சட்டச் சிக்கலும் இல்லாமல் பயன்படுத்தலாம்; கட்டற்ற மென்பொருட்களை மேலும் பரப்பலாம்.


உலகெங்கிலும் உள்ள மக்கள் ஓர் உறுதியான சமூகமாய் இணைந்து உழைக்கும்போது வெற்றி கிட்டும் என்பது எங்கள் நம்பிக்கை. எங்கள் விழுமங்களுக்கு மதிப்பளித்து உதவ விழையும் யார்க்கும் ஃபெடோராவில் இடமுண்டு. பிறருடன் வெளிப்படையாக இணைந்து பணியாற்றுவதோடு, எங்களுக்கு நிதியதவி செய்வோருடன் உள்ள திடமான கூட்டணியின் மூலமும் பல உயரங்களை நம்மால் எட்ட முடியும்.


புதிய அம்சங்களை உருவாக்குவதற்கான கடின உழைப்பு கட்டற்ற மென்பொருட்களை மேலும் ஆற்றல்மிக்கதாகவும், நெகிழ்தன்மை கொண்டதாகவும், பல லட்சம் மக்களுக்குப் பயனுள்ளதாகவும் ஆக்குகிறதென்று நம்புகிறோம். கட்டற்ற மென்பொருட்களை இன்னும் முன்னோக்கி எடுத்துச் செல்வதானால், அதற்காக எங்கள் நிலைப்பாடுகளை மாற்றிக்கொள்ள நாங்கள் தயங்குவதில்லை. பல மென்பொருள் சமூகங்களோடு நேரடியாக இணைந்து பணியாற்றி, அவர்கள் உருவாக்கியதை ஃபெடோராவின் மூலம் எல்லோர்க்கும் கிடைக்கச் செய்கிறோம். இப்படியாக, ஃபெடோராவைப் பயன்படுத்தவோர, அல்லாதோர் என அனைவரும் பலனடைகிறார்கள்.


firstபுதுமையான எண்ணங்களின் ஆற்றலை நம்பும் நாங்கள், அவற்றை எங்களது ஒவ்வொரு வெளியீட்டிலும் வெளிப்படுத்தி வருகிறோம். எங்கள் வெளியீடுகள் வருடம் இருமுறை வருவதால், புதிய மென்பொருட்களைப் பயன்படுத்த நீண்ட காலம் காத்திருக்கத் தேவையில்லை. அதே சமயம், ஃபெடோராவிலிருந்து உருவாக்கப்பட்ட சில லினக்ஸ் இயங்குதளங்கள் நீண்டநாள் உறுதிப்பாட்டிற்கு உகந்தவை. ஆனால், எப்போதும் எதிர்காலத்தை நீங்கள் முதலில் பார்க்கும் வண்ணம், ஃபெடோராவொ நாங்கள் புதுப்பித்துக்கொண்டே இருப்போம்.

மேலும் அறிய வேண்டுமா?

ஃபெடோரா என்பது ஒரு சிறப்பான இயங்குதளம் மட்டுமல்ல; கட்டற்ற மென்பொருட்களை மேம்படுத்தப் பாடுபடும் மக்களின் ஓர் அற்புதமான சமூகமும் ஆகும். நீங்களும் உதவ விரும்பினால் அதற்கும் வழிகள் உள்ளன. மேலும் அறிந்துகொள்ள கீழ்க்காணும் சுட்டிகளைப் பாருங்கள், ஃபெடோரா இயங்குதளம் பற்றியும், ஃபெடோரா பணித்திட்டம் பற்றியும், அதனைச் சாத்தியமாக்கும் மனிதர்களைப் பற்றியும் தகவல்கள் நிறைந்தது.

ஈமேக்ஸ் உரைதிருத்தி – பாகம் 2

ஈமேக்ஸ் என்னும் சூப்பர்மேன் பற்றிய அறிமுகத்தையும் சில கட்டளைகளையும் கடந்த கட்டுரையில் பார்த்தோம். மேலும் கட்டளைகளைப் பயிலும் முன்பு, ஈமேக்ஸின் மேஜிக் ஷோ 🙂

ஒரு நிரலின் (program) தரத்தை அளவிடப் பயன்படுத்தப்படும் முதல் அளவுகோல் வாசிக்குந்தன்மை (readability). Indentation சரியாக இல்லாத நிரல் நிரலாக ஏற்றுக்கொள்ளப்பட மாட்டாது. அத்தகைய ஒரு நிரலை ஒரே நொடியில் அழகான நிரலாக மாற்றிக் காட்டும் ஈமேக்ஸ்.

  1. Indentation அறவே இல்லாத ஒரு நிரலை ஈமேக்ஸில் திறக்கவும்.
  2. Cx அழுத்தியபின் h அழுத்தவும்.
  3. CM அழுத்தவும்.

உங்கள் நிரல் எவ்வளவு நேர்த்தியாக சீரமைக்கபட்டுவிட்டது! ஆம் இதெல்லாம் ஈமேக்ஸ்கு ஜுஜூபி 😀 சரி வாருங்கள் மேலும் சில கட்டளைகள் பயில்வோம்.

பல கோப்புகளைக் கையாளுதல்

பல கோப்புகளை ஒரே நேரத்தில் கையாளுவது பல சமயங்களில் பயனுள்ளதாக இருக்கும். எடுத்துக்காட்டாக, ஒரு கோப்பிலிருந்து உரையை நகலெடுத்து இன்னொரு கோப்பில் இடலாம். வலை உலாவிகளில் பல tab-களைப் பயன்படுத்துவது போலத்தான். vi பயன்படுத்திப் பழகியோருக்கு இது புதுமையாக இருக்கலாம். 😛

முதல் கோப்பைத் (sample1 என்று வைத்துக் கொள்வோம்) திறந்தபின் இன்னொரு கோப்பையும் (sample2 என்று வைத்துக் கொள்வோம்) அதேபோலத் (Cx Cf) திறக்கவும். இப்போது sample1 sample2-ன் வலப்பக்கத்தில் இருப்பதாய் எண்ணிக் கொள்ளுங்கள். அதாவது திறக்கப்படும் ஒவ்வொரு புதிய கோப்பும் தற்போதைய கோப்பின் இடப்பக்கத்தில் திறப்பதுபோல் வைத்துக்கொள்ளலாம். இப்போது sample1-ற்குச் செல்ல Cx அழுத்தி வலது அம்புக்குறியை அழுத்தவும். அதேபோல் மீண்டும் sample2-ற்குச் செல்ல Cx <இடது அம்புக்குறி>.

இப்படிப் புதிய கோப்புகளைத் திறந்துகொண்டே போனால் ஒரு கட்டத்தில் தேவையான கோப்பிற்குச் செல்வது தலைவலியாகிவிடும். கவலைப்பட வேண்டாம். நூறு கோப்புகளைத் திறந்தாலும் தேவையான கோப்பிற்குச் செல்ல எளிமையான வழி உள்ளது. Cx அழுத்தி b அழுத்தவும். இப்போது நிலைகாட்டி (cursor) சாளரத்தின் கீழ்ப்பகுதியில் வந்து நிற்கும் (இதை mini-buffer எள்று சொல்வதுண்டு). அங்கே தேவையன கோப்பின் பெயரை இட்டு Enter அழுத்தவும்.

திறக்கப்படிருக்கும் அனைத்துக் கோப்புகளின் பெயர்களையும் பட்டியலிட Cx Cb.

மீளமைத்தல் (undo)

உரைதிருத்தும் போது மீளமைத்தல் என்பது பலருக்கு முக்கியமான தேவை. இதற்கு Cx u பயன்படுத்தலாம். C_ என்பதும் இதே வேலையைச் செய்யும்.

தேடுதலும் மாற்றுதலும் (Search and replace)

குறிப்பிட்ட சொல்லை அல்லது சொற்றொடரைத் தேட Cs அல்லதி Cr பயன்படுத்தலாம். Cs நிலைகாட்டி இருக்கும் இடத்தில் தொடங்கி முன் நோக்கித் தேடும், Cx பின் நோக்கித் தேடும்.

Regular expressions கொண்டும் தேடலாம். முன்நோக்கித் தேட CMs, பின்நோக்கித் தேட CMr.

அதேபோல் ஒரு சொற்றொடரைத் தேடி அதற்குப் பதிலாய் வேறொரு சொற்றொடரை இட, C% அழுத்தவும். Minibuffer-ல் தேடவேண்டிய சொற்றொடரை இட்டு <Enter> அழுத்தவும். பின்னர் புதிய சொற்றொடரை இடவும். இதேபோல் regular expression கொண்டு replace செய்ய CM% பயன்படுத்தலாம்.

இப்போது எங்கெல்லாம் replace செய்ய வேண்டும் என்பதையும் குறிப்பிடலாம்.

குறியீடு பொருள்
! அனைத்து இடங்களிலும் மாற்ற
, தற்போது காட்டப்படும் இடத்தில் மட்டும் மாற்ற
y தற்போது காட்டப்படும் இடத்தில் மாற்றி அடுத்த இடத்திற்குச் செல்ல
n அடுத்த இடத்திற்குச் செல்ல
q எதையும் மாற்றாமல் விட

ஈமேக்ஸ் உரைதிருத்தி – ஓர் அறிமுகம்

ஈமேக்ஸ் (emacs) – இதை என்னவென்று அறிமுகம் செய்வது? வெறும் உரைதிருத்தி (text editor) என்று கூறிவிட முடியாது; அதையும் தாண்டிப் பலவற்றைச் செய்யவல்லது. கிட்டத்தட்ட ஓர் இயங்குதளத்திற்கு இணையான மென்பொருள். ஆம், எழுத்துக் கோப்புகள் (text documents) தொடங்கி, JPEG, PNG போன்ற படக்கோப்புகள், PDF ஆவணங்கள் எனப் பல வகையான கோப்புகளைக் கையாள வல்லது.

கோப்புகளைப் பார்ப்பதும் திருத்துவதும் வெறும் சிறு பகுதிதான். இதைக்கொண்டு மின்னஞ்சல் அனுப்பலாம், கிட் (git) போன்ற திருத்தக் கட்டுப்பாட்டு மென்பொருட்களைக் (revision control systems) கையாளலாம், முனையத்தைப் (terminal) பயன்படுத்தலாம். மேலும் நாள்காட்டி, கணிப்பான்(calculator), விளையாட்டுகள் எனப் பல வசதிகளை உள்ளடக்கியது. அதனைக் கிட்டத்தட்ட ஓர் இயங்குதளத்திற்கு இணையாதென நான் கூறியதன் காரணம் இப்போது புரியும் என்று நினைக்கிறேன் 🙂

இதற்கு இன்னொரு சிறப்பம்சமும் உண்டு. கட்டற்ற மென்பொருள் கோட்பாட்டின் தந்தையென அழைக்கப்படும் ரிச்சர்ட் ஸ்டால்மன் அவர்களால் உருவாக்கப்பட்டு, GPL உரிமத்துடன் (இதுவும் அவர் வடிவமைத்ததே) வெளியடப்பட்ட முதல் மென்பொருள் ஈமேக்ஸ்.

இத்தகைய சிறப்பான ஒரு மென்பொருளைக் கற்றுக்கொள்ள இன்னும் ஏன் தாமதிக்க வேண்டும்? வாருங்கள் ஈமேக்ஸ் உலகத்திற்குள் புகுவோம்.


பல குனு/லினக்ஸ் இயங்குதளங்களில் தொகுபதிவகத்திலேயே (repository) ஈமேக்ஸ் கிடைக்கும். அந்தந்த இயங்குதளத்தின் பொதி மேலாண்மை மென்பொருள் வாயிலாகவே நிறுவிக்கொள்ள முடியும். உபுண்டு இயங்குதளத்தில் நிறுவ, முனையத்தில் கீழ்க்காணும் கட்டளையை இடவும்:

sudo apt-get install emacs23

ஈமேக்ஸ் கட்டளைகள்

ஈமேக்ஸ் கட்டளைகளைப் பார்க்கும் முன்பு, இரு குறியீடுகளை அறிந்து கொள்வது பயனுள்ளதாய் இருக்கும்.

குறியீடு பொருள்
C-x Ctrl விசையுடன் சேர்த்து x விசையை அழுத்தவும்
M-x Meta (Alt) விசையுடன் சேர்த்து x விசையை அழுத்தவும்

கோப்பைத் திறத்தல்

Cx அழுத்தி Cf அழுத்தியதும் நிலைகாட்டி (cursor) சாளரத்தின் கீழ்ப்பகுதியில் வந்து நிற்கும். அங்கே திறக்கவேண்டிய கோப்பிற்கான பெயரை இடவும்.

Screenshot of opening a file in emacs

Screenshot of opening a file in emacs

கோப்பை சேமித்தல்

கோப்பில் மாற்றங்கள் செய்தபின் அதனை சேமிக்க, Cx Cs (C-x அழுத்தியபின் C-s அழுத்தவும்).

கோப்பை மூடுதல்

சேமித்த கோப்பை மூட Cx k (Cx அழுத்தியபின் k அழுத்தவும்) Enter

ஈமேக்ஸை விட்டு வெளியேற Cx Cc

உரை திருத்துதல்

உரையின் ஒரு பகுதியை select செய்ய, எப்போதும் போல Shift-ஐ அழுத்திக்கொண்டு அம்புக்குறிகளைப் (arrow keys) பயன்படுத்தலாம். அல்லது, அப்பகுதியின் தொடக்கத்தில் நிலைகாட்டியை வைத்து C-<space> அழுத்திவிட்டு, பின்னர் அம்புக்குறிகளைக் கொண்டு தேர்வு செய்யலாம்.

தேர்வு செய்த பகுதியை நகலெடுக்க Mw

தேர்வு செய்த பகுதியை அழிக்க Cw. மற்ற உரைதிருத்திகளில் இருப்பது போல் அல்லாமல், வெட்டுவதும் அழிப்பதும் (cut & delete) ஈமேக்ஸைப் பொறுத்தவரையில் ஒன்றே. அதாவது delete செய்யப்படும் எந்த ஓர் உரையும் clipboard-ல் இருக்கும். எனினும், Backspace அல்லது Delete விசைகளைக் கொண்டு ஒவ்வோர் எழுத்தாக அழிக்கப்படும் உரை க்ளிப்போர்டிற்குச் செல்லாது.

ஏற்கனவே வெட்டப்பட்ட அல்லது நகலெடுக்கப்பட்ட உரையை paste செய்ய Cy (y = yank)

உலாவுதல் (navigation)

பொதுவாகப் பயன்படுத்தப்படும் அம்புக்குறிகள், Home, Endஆகிய விசைகள் அல்லாமல் ஈமேக்ஸிற்கென்றே உரித்தான சில விசைகள் உள்ளன. அவற்றுள் சில:

ஓரெழுத்துப் பின்னால் செல்ல C-b

ஓரெழுத்து முன்னால் செல்ல C-f

முந்தைய வரிக்குச் செல்ல C-p

அடுத்த வரிக்குச் செல்ல C-n

வரியின் தொடக்கத்திற்குச் செல்ல C-a

வரியின் இறுதிக்குச் செல்ல C-e

இவை முதலில் சற்றுக் கடினமாகத் தோன்றினாலும், பழகிக்கொண்டால் விரைவாகத் தட்டச்சு செய்ய முடியும் (விசைப்பலகையில் அம்புக்குறிகள் இருக்கும் ஓரமாகக் கையை நகர்த்த வேண்டியதில்லை).

குறிப்பு: இதுபோன்ற கணினி தொடர்பான தமிழ்க் கட்டுரைகளுக்கு கணியம் மின்னிதழ் (e-magazine) ஒரு நல்ல ஊடகம்.

Auto-compile LESS file to CSS in emacs

LESS CSS is a great way of writing CSS code, thanks to its set of extended features that are not at all possible with CSS. Nested rules, variables, color functions, etc make it very handy. As the final output seen by the browser is plain CSS, there is no need for any third-party library or whatever.

Being an emacs user (and a fan) for a while, I’ve been looking for a way to compile LESS files to CSS, as and when they are saved. It would be even better if I could bind it to a keyboard shortcut, say F9. (This is not something big, just that I didn’t do it so far.)

My directory structure is like this:
LESS files in /some/path/less/
CSS files in /some/path/css/

So compiling a LESS file, say /some/path/less/style.less should output to /some/path/css/style.css

Here is the code that you have to add to .emacs

;; Function to compile current buffer (if it's a LESS file) to CSS
(defun compile-less-css ()
  "Compile LESS to CSS"
  (if (string-match ".less$" (buffer-file-name))
    (async-shell-command (concat "lessc -x " (buffer-file-name) " "
      (file-name-directory (directory-file-name (file-name-directory buffer-file-name)))
      "css/" (file-name-sans-extension (file-name-nondirectory buffer-file-name)) ".css") nil nil))

;; HotKey  to compile LESS to CSS
(global-set-key '[f9] 'compile-less-css)

;; To compile whenever the file is saved, uncomment the following line:
;(add-hook 'after-save-hook 'compile-less-css)

After saving the file, load the file so that the changes take effect. To load the file,
Mx load-file.

Enter .emacs in the prompt. Done! Now open a LESS file in emacs and press F9.

Happy hacking 🙂

Transcript of RMS’ talk at MIT, Chrompet on March 13 2002

Well, this post is related to quite an old event (happened in 2002). It was always exciting to me that RMS had visited my college (Madras Institute of Technology) twice. And I have been curious to read/see his talks here, but unfortunately I could not find any article or transcript until some noble soul in ILUGC asked for it. It was surprising to me to find the transcript at Thanks to the other noble soul who preserved it and shared in pastebin. I’m just sharing a slightly modified version (mostly formatting and punctuation corrections) of it. Here it goes…

RMS at MIT, Chrompet

RMS at MIT, Chrompet

After the welcome address (which was unfortunately not recorded on the tape) the Chief Guest, Mr. Richard M Stallman took his hands off his laptop and came forward to deliver his speech. Here is the transcript:

So I guess I have to stand exactly here in order for it to work right. please raise your hands if you cannot hear me. Oh oh, nobody is laughing I guess that means the sound system is not working. [Laughter] Now what is *this* microphone for? oic. So I can use *this* instead. There’s only one. This is not *stereo*. Well, ok. We’ll see what happens.

If I hunt around enough I should be able to play music with this. [Laughter] well, The subject of this talk is the free software movement. but really this subject is an ethical, political question. The question is “what rules should society have for using software?”.

But now well it sounds like its still working. Alright. I’m hoping to find a place where we won’t have the feedback going on. I’m going to get feedback from you at the end of the speech but I don’t want feedback from the speakers. I don’t think their opinion is very thoughtful and I don’t think they have much useful to add to what I’m saying. [Laughter]

So the question is “what rules should the society have for using software?”. Now most of the time when people consider this question they work for software companies and they address it from a self serving point of view. They ask “what rules can we impose on every one else to make them pay or sell their money?”. Now I’m sure you are familiar with the answers that they come up with.

Now, I had the good fortune in the 1970s to be part of a community of programmers who shared software. And because of that I was led to address that question from a different direction to ask “What rules make for a good society for the people who use software?” and so I reached completely different answers. Let me tell you a little bit about what life in that community was like. The community included programmers at some of the best universities. Even programmers of computer companies sometimes participated. And in this community if you wrote a program, you shared it. That was our way of life. Nobody forced this. Nobody demanded this. But it was our way of life and so everybody did it.

The lab where I worked, the AI lab at the other MIT, was perhaps the… in a way the deepest part of this community because there, all the software we used was the community software. It was all free software. we had an entire Operating System. The Incompatible Time Sharing system or ITS for short was developed by the community and mostly by us and therefore all the software that we used, we could and would share with anybody we wanted. So if you walked past another hackers console and you saw something interesting you’d say “hey what is that?” and he’d say “oh this is the new foobar program that we just got from Stanford and its in the foobar directory.” so you’d look in that directory and you’d find the executable you could run with also the source code. Which you could study to learn how they solved those problems. And if you ran the program you might…[interrupts]

To the MIC-TESTER: can you do anything about this feedback. There’s so much. There’s got to be a way to solve this problem. Maybe if you turn of those microphones? He should be able to turn them off… ok we’ll see if this helps. in running the program you might encounter bugs or you might have ideas for new features. So you could go to the source code and fix the bugs and add more features. You could even cut out a piece of that program and put it into some other program that you were writing. We used to call this “cannibalising” the old program which was a joke because it doesn’t destroy the old program when you do this. So you could use the program not just by running it but in all the various ways it could be useful. The software we developed was available to everyone. It was part of human knowledge and because of that I could feel that I was on humanity’s team. I was not working against other people, trying to beat them or stop them. I was working for the good of everyone. And that enabled me to feel good about my work.

And so.. over the years the system grew the way a city grows. you know, you see some lines of code and say “oh by their style I can tell these were written in the 1960s”. Well, in other areas you see whole neighbourhoods that have been built recently and a program would be passed from one person to another to another they would keep on improving it over the years.

But then we got a taste of what life was like for most computer users. the people who did not belong to a community like ours. That happens when XEROX gave MIT a laser printer. Now this was a very handsome gift. it was the first time anybody outside XEROX had a laser printer. It was actually a high speed copier that had been turned into a laser printer by adding a laser attachment. Now this was a very fast printer and it printed a page a second and it had high resolution and straight lines came out nice and straight. But it had a flaw. It frequently got a paper jam. Now then if it was a copier maybe that was okay cause there would have been somebody to fix it when it jammed. So it wouldn’t have been jammed for long. But as a printer it was off by itself and often no body would pass by and fix it for a long time. So it would stay jammed for maybe an hour. It was a real problem. Now when we discovered, when we recognized that this problem existed we knew a solution. Because our previous printer which was slow and low resolution and tended to make straight lines come out crooked also got paper jams. And since we couldn’t improve the printer itself, we being programmers not printer engineers, we added features to the software to compensate for the problems. For instance there was a feature that every time a file finished printing the system would display a message on that user’s screen saying “your file foo has been printed”. So you had to wait because the printer was slow but you didn’t have to wait extra just because you didn’t know that your job was finished. And there was the second feature that I recall adding which was: anytime the printer got in trouble the system would search the print queue and make a list of people waiting for printing and it would display a message to each one of them saying “The printer is in trouble. Go fix it.” now if you got that message you were not going to ignore it because you would know that only a few people are going to get that message and you didn’t to want to take the risk that the printer would stay jammed. So you would go straight to the printer. The printer is still jammed. But a minute later 2 or 3 people would arrive. One of them at least would know how to fix the problem and would teach the others. So essentially the system became self-correcting. We treated the user as a part of the system. And we added end-to-end feedback and we obtained reliable operation for the entire system even though the printer components were still unreliable. After all that’s what feedback is for.

So we solved the problem and when we saw that the new printer had a similar problem we thought of using a similar solution. But there we ran into a stone wall. Because we were able to add these features to the old printer because the old printer was controlled by a free program. We had the source code. We could make any changes at all limited by our skill as programmers. But the new printer was controlled by a proprietary Xerox program. We couldn’t add any features. We were stuck completely. we were prisoners of our software. So we just had to suffer with it. So you’d type the command to print a file and you’d go back to work cause you know its going to take a long time. A while later you’d notice the time oh its been half-an-hour… well, I don’t desperately need it yet and its probably not printed yet so I’d go back to work. A while later you’d notice the time. Oh its been a whole hour. Maybe its printed now. so you walk upstairs. you go to the printer and see its been jammed the whole time. So at that point you fix the jam and you go back to work. and a while later you’d notice the time oh its been half-an-hour and now I really need the print-out. I’d better go and see. So you go upstairs to the printer and see it printed 200 pages of other people’s stuff which was about 3 minutes of printing for this fast printer and then it jammed again. And at that point you’d say “I’m going to stand here and fix it every time it jams and so I’d get my output”. Constant frustration.

But what made it even more boring was to realize that we could have fixed the problem except that XEROX was not letting us fix the problem because they wouldn’t let us have the source code. Then I heard that somebody at Carnegie Mellon had a copy of that source code. Eventually I was visiting Carnegie Mellon for some other reason. So I went to his office and said “Hi, I’m from MIT. Could I have a copy of the printer’s source code”. And he said “No. I promised not to give you a copy”. [Laughter]. I was so stunned as well as angry that I couldn’t think of a way to express it and do justice to my anger. All I could think of was to walk out of his office without another word.

But I thought of that afterwards. you see… his refusal to help us. essentially his denial of co-operation with his colleagues was very bad for us at the AI lab at the other MIT. Because we never got that source code, we were never able to solve this problem and the printer just was frustrating to use for several more years until we replaced it.

But it was very good for me in a paradoxical way because it taught me an important lesson. A lesson which is important because most programmers fail to learn it. you see.. he had promised to refuse to co-operate with us, his colleagues at MIT but he didn’t just refuse to co-operate with us. Chances are he refused to co-operate with you too. And chances are he did the same thing to you as well. And I’d expect he also refused to cooperate with you. In fact, he prolly refused to co-operate with most of you here today. The exceptions being some of you who weren’t born yet. Because that was in 1980 or so. Because he had promised to refuse to co-operate with just about everybody alive on earth at that time, he had signed a non-disclosure agreement. Now this was my first direct encounter with a non-disclosure agreement. I was the victim. I and my Whole lab were the victims. And the lesson I learnt was that non-disclosure agreements have victims. They are not innocent. They are not harmless. They are hurting somebody.

Now I was lucky to learn this lesson. Most programmers first encounter a non-disclosure agreement when they are invited to sign one. And there’s always some kind of goodies, some temptation … something they are going to get when they sign. So they make up excuses to ignore the ethical issue of what they are doing. They say “He’ll never get a copy anyway so who shouldn’t I join a conspiracy to deprive him”. They say “this is the way its always done. Who am I to question it?” they say “If I don’t sign this. Somebody else will”. Various excuses to gag their consciences. But when somebody invited me to sign a non-disclosure agreement my conscience was already sensitized. Because it couldn’t forget how angry I was when somebody had refused to share with _me_ the source code the source code that my lab needed. And I couldn’t turn around and do the same thing to somebody else who didn’t deserve it anymore than we did. So I said. Thank you very much for offering me this nice piece of software. But I cannot accept it in good conscience on the conditions that you have set. So I’m going to do without it. No thank you. And so I have never knowingly signed a non-disclosure agreement for generally useful technical information such as software.

Now there are other kinds of information which raise different ethical issues. For instance there is personal information. A totally different subject. you know if you wanted to talk with me about what was happening between you and your girlfriend and you ask me would I please not tell it to anybody That I could agree to. Because that is not generally useful technical information. At least it probably isn’t. Now I could imagine that you might reveal to me some wonderful new sex technique [Laughter] and then I might feel a moral duty to pass it on to the rest of humanity so that somebody could make use of it. But if you just wanted to talk with me about the usual soap opera stuff.. you know… who hurt, who’s feeling how and how the the other one responded and who’s angry and things like that those details that your life are those are not something that other people need to know to in order to see how to live their lives better. So its okay for me to keep those secret for you.

But when it comes to generally useful technical information. The stuff of science and engineering. The mission of these fields is to develop that information for humanity. If we conceal it we are betraying that information of our field. This after a few years of thought I came to the conclusion that this was wrong and that I decided that I would not do it. But during the same period of time a serious of calamities fell on my community and ultimately wiped it out. My community was destroyed. perhaps the final blow was when digital discontinued the PDP-10 computer. Because the entire time sharing system was written in assembler language for the PDP-10. So when the PDP-10 was discontinued our 15 years of work turned into dust and blew away. Now that’s a pretty bad blow in itself but the consequences were even worse. Because the only operating systems of any kind from modern computers were proprietary. To get a copy you had to sign a non-disclosure agreement. so the only way you could get a modern computer and use it was to betray every one else in the field. To do exactly what I had concluded people shouldn’t do. So that put me in a moral dilemma. I could not go on working on my field the way I had been doing it before because that path had been blocked off. It was no longer being available. It depended on being a part of a community that had its own body of software that it could share.

So what was I going to do? the most obvious option was to accept that the world had changed. To adapt myself to it. To start signing non-disclosure agreement and start using these non-free operating systems. And I’m sure MIT would have had me developing non-free software as well. I thought about that and I realized in that way I could have fun programming and I could make money but at the end and I had to look back at my career and say “I’ve spent my life building life to divide people”. And I would have been ashamed of everything I had achieved. So I looked for another option. And it was easy to find one. I could leave the software field and do something else. To many programmers that seems to be unthinkable. They say “The people who hire programmers demand this, this and this. If I don’t do it I’ll starve.” That’s literally the word they use. “starve”. Well, I had no other special skills. But I’m sure I could have become a waiter. Not at a fancy restaurant but I could have been a waiter somewhere. There are two things to know about being a waiter. One is as a waiter you are not doing anything wrong. There’s nothing evil about being a waiter. Well at most restaurants. [Laughter] and the second thing to know is as a waiter you are not going to starve. But I realized that for me being a waiter would be no fun. And it would be wasting my skills as an operating system developer. It avoid misusing the skills. Developing a non-free software would be misusing my skills. Its better to waste them than to misuse them. But still its not the best thing. So I decided to look around for some other option. What could an Operating System developer do that would be ethical? that would make the world a better place? And I realized that an Operating System developer was what we exactly needed.

The moral dilemma existed for me and any other computer user because all the other existing operating systems were proprietary. If an Operating System developer were to write another Operating System, this is your free to share. This would give everybody a way out of the moral dilemma. I concluded that I had been elected by circumstances to do this job. The job had to be done. I knew that. Nobody else was paying attention. nobody was going to do the job if I did not. And I had the skills necessary to do the job. So I realized I had to do it. I decided I would develop a free Operating System or die trying. Presumably of old age. So this led to a bunch of technical design decisions. What kind of system should it be? well I had seen one entire Operating System turn into dust and blow away because it was written for a particular kind of computer that got discontinued. I didn’t know what kind of computers would be popular in 5 years or 10 years. I knew it would take years to get this job done. And I didn’t want to take the risk that the same thing would happen again. Clearly the system had to be portable. Well, I knew of portable Operating System that was a success and that was UNIX. So I decided to follow the design of UNIX. That way there would be a good chance. I could write a system that could work and be portable.

And further more I decided to make the system upward compatible with Unix. Why? because users don’t like incompatible changes. I knew that if I took all the best ideas seen in various system and added my own favourite ideas I could have developed my dream operating system. But that would have been incompatible with other systems. I knew what users would say. They would have said “well this is very nice but it would be too much work to switch over and we can’t afford. So we are not going to use your system.” now at that point I could have made an excuse and I could have said “Well I offered them freedom and they didn’t take it so its their fault”. That would have been sufficient as an excuse. But I wanted more than an excuse. I wanted to start a community where people would actually come and enjoy the benefits of living in liberty and having a community. So to do that I had to make a system that people would decide to use. Compatibility with a popular system was a good way to make it easy for people to switch to this system once it was done.

Now UNIX consists of many components which communicate through documented interfaces or more or less document. So to be compatible with UNIX you had to replace each component one by one. Which means that the initial design decisions were all made. Except for one: What range of target machines would we aim for?. Now UNIX was designed to run on 16 bit machines. But that the small address space of those machines made it extra hard work to get all the programs to run in that small address space. Well I realised this was going to be a big job and we have to make it try to make it easier. One way to make it easier was not to support 16 bit machines. I figured that by the time this is done 32 bit machines would be the norm and so it would be okay if we didn’t support 16 bit machines. And indeed that’s what ultimately happened. By the time we had a GNU system that could run everybody was getting 32 bit machines.

So the design decisions were made so all that we needed was a name. well, we hackers, generally look for funny or mischievous names because think of people being amused by the name is half the fun of writing the program. So we also had a hacker tradition when you are writing a program that’s similar to some existing program which is something we often had to do back before the days of portable programming. you know there was an existing program for some other computer system and you wanted something like it you had to write another one. So when you were doing that, writing a program similar to an existing one, you could give it a name that was a “recursive acronym”. Which said “This program is not that one”. So there were many TECO text editors. And they were generally called something or the other TECO. But one hacker called his program TINT for TINT Is Not TECO. The first recursive acronym. Well, we thought that was so much fun, we started making more. In 1975 I developed the first EMACS text editor. The programmable, extensible display editor. And there were many imitations of EMACS and some were called something or the other EMACS. But one was called FINE. For FINE Is Not EMACS. And there was SINE for SINE Is Not EMACS. And EINE for EINE Is Not EMACS. And MINCE for Mince Is Not Complete Emacs. And then EINE was almost completely rewritten by not quite and the new version was called SWEI for Swei Was EINE Initially. [Laughter].

So I decided to look for a recursive for ‘Something Is Not Unix’, because I didn’t have any cleverer idea. So I tried the obvious four letter approach and I discovered that none of them was a word. They didn’t seem funny. So I tried a contraction so I could make a three letter acronym. I started substituting letters. ANU, BNU, CNU, DNU, ENU, FNU, GNU!. Well GNU is the funniest word in the English language… so that had to be it. Now why is the word GNU used for so many jokes? The Reason is according to the dictionary the ‘G’ is silent. So its sounds like ‘New’. So in fact when people were asking the question “What is GNU?” long before there was a GNU system. But now it has a new answer when someone asks you “What is GNU?” you can answer ‘GNU’s Not Unix’. And look at this you see it sounds like you are being obnoxious telling the person what it is not instead of what it is. But in fact you are giving the one and only correct answer [Laughter] . Anyway when it’s the name of our Operating System please pronounce a hard ‘G’ pronounce it ‘gah-nu’. If you talk operating the ‘new’ operating system you would get people very confused. You see we’ve working on it for 18 years now so its not new anymore! [Laughter] but its still is and always will be ‘Gah-NU’ no matter how many call it Linux by mistake.

So we had a name. We could start work. In January 1984 I quit my job at the other MIT. And started working on pieces of GNU. Now I had to quit my job because if I’d kept work at MIT, the MIT administration could have said they owned everything I wrote and I would have had to beg and plead with them about precisely how to release the software. I wouldn’t want that to happen. I didn’t want to take any risk that my software would not be free. So I took them out of the equation by quitting my job. And I’ve never had a job since then. But the head of the AI lab was nice enough to let me keep using the facilities.

So I began using the one and only Unix machine at the AI lab to start developing GNU. Now at the time I thought we would develop all of these pieces and only then would people start to use it. That’s not how it happened. In September 1984, I started working on GNU Emacs. Which was my second implementation of the programmable text editor. By early 85 it working well enough that I could use it for all my editing and that was very convenient you see I had no intentions of learning to use ‘vi’. So until that point I did my editing on other computers and transferred the files through the network to the UNIX machines to test them. Once GNU Emacs was running I could actually do my editing on the Unix machine. and so in fact had been other people. Other people who had been emacs users wanted to have an emacs to run on their unix machines started asking me for copies. So I had to work out the full details of how to do distribution.

Well, Of Course I put a copy in the FTP server directory and that way people on the net could get copies but in 1985 most programmers were not on the Internet. So they were asking me how could they get copies. I could have said “I want to spend my time writing more pieces of GNU. Not writing Mag Tapes. So please find a friend who is on the Internet who will download it and put it on tape for you.” And they would have found somebody sooner or later. Every programmer knows every other programmers. But I had no job. And I was looking for some way I could make money through my work on Free software. So I announced “Send me a 150 Dollars. And I’ll mail you a copy of GNU Emacs”. And the orders began dribbling in. By the middle of the year they were trickling in. I was beginning to get 8 to 10 orders a month. Which if necessary I could have lived on. So I had a free software business that was successful enough for me.

Now part of the reason I could have lived on that is that I have always made a practice of living cheaply. Most Americans if they start making ‘this’ much money they immediately look for how they can spend ‘this’ much money. [Laughter] so they start buying houses and cars and boats and airplanes and rare stamps and art work and adventure travel and… children… [Laughter] all sorts of expensive luxury and of course once they get them they don’t think they can live without them anymore. so the result is they become puppets of money. Whoever has the money they have to obey. They’ve lost the freedom in their lives. But if you resist getting accustomed to these expensive habits then you can decide what you want to do with your life. you can do what you think is important. you can make a contribution to the world. Instead of just struggling all the time for money.

But people sometimes used to ask me before I started forestalling them: “What do you mean its free software if it costs 150 dollars”. Well, the English word free has multiple meanings. One meaning refers to price and another meaning refers to “freedom”. When I speak of Free Software I’m referring to freedom not price. So think of free speech, not free beer. [Laughter] . When you start talking about free software to people it doesn’t hurt the first time to explain that I mean ‘free as in freedom’. to help prevent any confusion. So some people got their copies of GNU Emacs and they didn’t pay me because there was nothing on the FTP server to collect any money from anyone anybody could download it. Some got their copies on a tape from me and they paid me. And some got their copies indirectly from somebody else who had a copy and maybe they paid that somebody else I don’t know but they didn’t pay me. Whether they paid the somebody else that was between them and it was not in my business. so GNU Emacs was gratis for some users and paid for for some users. But for all of the users it was free as in freedom.

Because all of them had certain crucial freedoms which makes the definition of free software. So let me now in fact get to the hard issue and give you the detailed definition of Free software. Because its after all its easy to say I believe in freedom but you are not addressing the hard issue that way. The hard issue is which are the freedoms that are important – the freedoms that we should safeguard and which are the secondary freedoms which have to give way when they conflict with the primary ones. Because different ideas of freedom _can_ conflict. you know your freedom to swing your fist ends ends where my nose begins. because that’s the matter of which freedoms are primary and which are secondary. So the definition of free software represents a conclusion about which freedoms are primary. Let me give it to you now. A program is free software for you a particular user if you have all of the following freedoms.

  • Freedom #0 is the freedom to run the program for any purpose in any way.
  • Freedom #1 is the freedom to help yourself by studying the code to see what it does and then changing to suit your needs as you wish.
  • Freedom #2 is the freedom to help your neighbour by distributing copies to others.
  • Freedom #3 is the freedom to help build your community by publishing improved versions so others can get the benefits of your improvements.

If you have all of these freedoms the program is free software for you. Now freedom#0 doesn’t require much comment. Its pretty clear that if you are not even allowed to run the program anyway you like that’s a rather restricted program. Even most most software will let you run it anyway you like, even though its restricted in other ways. And also the way the law is set up, if you have freedoms 1, 2 and 3 then freedom 0 follows as a consequence. So the freedoms that really distinguish Free Software from typical software are Freedoms 1, 2 and 3. So I’ll go into more depth explaining why those freedoms are more important and what they need:

Freedom#1 is the freedom to help yourself by studying the code to see what the program really does and then changing it if you like to suit your needs. To make this freedom feasible you have to be able to get the source code. yes its true its possible to study the binary by disassembling but that’s terribly hard and people only do it as a last resort of desperation. So For this freedom to be really be meaningful you must have access to the source code. So access to the source code is a free condition of Free Software. Now who can make use of this freedom?

Well first of all, what changes do I need? well you could fix bugs, you could add new features. you could translate all the error messages and output into Tamil. you could port it to a different computer system. Any change you want to make, you should be free to make. Who can take advantage of this freedom. Clearly any skilled programmer can make use of this freedom. But not only they. Any business that uses software can directly take advantage of this freedom. Now maybe there are no programmers in the company because what they do is make clothing. That doesn’t matter if they want the program changed they can go to a programming company and say “How much will you charge for these changes and when can I have it done?” and if they don’t like the answer they get over there they can go ask another company and say “When can you have it done?”. Because one of the consequences of Free Software is that there is a free market for all kinds of supports and services. And the result is you can expect better support and service for free software. For a proprietary program, support is a monopoly. Because only the company that owns the program in general can give you any support. Except for the most superficial kinds. So the result they don’t have to care and they know it. They’ll tell you “Pay us and we’ll let you report a bug”. and if you do that they’ll tell you “in six months there will be an upgrade. Buy the upgrade and you’ll see if we’ve fixed this bug and you’ll see what new bugs we gave you” [Laughter] .

So the support for proprietary software is typically lousy and its interesting to note that even if there’s a choice of several different proprietary programs to do the job, once you’ve chosen a program the support for that program is always a monopoly. So you are choosing between several monopolies. Well, with Free Software you’ll get a free market for support. Of Course, in general you have to pay for it. Free software doesn’t mean zero price. That is not the issue at all. Were not to eliminate paying for things and we think its fine when programmers get paid to provide support for programs. In fact that’s the kind of free software business that I did for the second half of 80s. But the important thing is that every body has got the freedom the use the program, to get support from wherever they like, to offer support when they wish. People can also benefit from this freedom if they value security and privacy on their computer systems. Because when you have the freedom to check what the program does you can see if it has a Trojan Horse. you can see if it has a surveillance feature, now if you don’t have the time to check every program you use, but there’s a community of users and people are checking various parts at various times. The result is if there’s a malicious feature, it might get caught. And if there are accidental bugs because most programmers wont put in malicious features but we all make mistakes. So bugs are always to be expected. If there’s a bug, people can catch that too and fix the result is that you can trust the software better because it is not blind trust.

With a proprietary program all you can do is put blind faith in the developer and often they don’t deserve it. Microsoft put a surveillance in some version of Windows. It would report what was on your hard disk. and I think people got very angry and they took it out. And I heard there are other proprietary programs that are popular which has surveillance features in them too. There’s also suspicion that there’s a back door in windows because there are symbols called NSAKEY1 and NSAKEY2. People suspect that, maybe, these have to do with a backdoor that was provided for the NSA. No one knows and there’s no way to find out either. And finally any intelligent person can take advantage of this freedom.

Now most people are not going to learn to be skilled programmers but anybody can learn a little programming which is enough to make simple changes. And that’s useful by itself. And if you are the kind of person whose strength is getting along with people you are not a technical person well then you probably have a lot of friends. And some of those friends are programmers so when you want a change made in your program you can convince one of your friends to do it. So everybody can take advantage of the freedom to change programs. Now if you don’t have this freedom that causes practical material harm to the society. Because people are stuck using software that doesn’t do what they want and maybe even snoops on them. And they cant fix it. They are prisoners of their software. But it also causes Psycho-Social harm. That affects people’s morale, their enthusiasm for their work. you see, if you have to use a program that’s painful to use its not good. And you are not allowed to improve it, its going to be frustrating. Its going to be frustrating over and over. Well people who’ve experience this repeated frustration they tend to learn to stop caring that’s the way you can protect yourself from feeling frustrated. If you don’t care whether you don’t get any work done or not then you are not going to get frustrated when you can’t get any work done. But when …

[Audio tape flipped over.. A few minutes of speech is lost]

For beings that can think and learn sharing useful knowledge is the fundamental act of friendship, when these beings use computers these acts take the form of sharing software. If you don’t have this freedom, if a program has a owner and this owner and this owner by whatever method has set up a situation that every user has to pay to use the program

[someone leaves]

RMS: leaving so soon? I hope it wasn’t something I said

Audience: [Laughter]

Well, if the program has an owner who has established a situation where every user must pay to use the program then this creates a financial disincentive, discouraging the user of the program. Because some users will say “Alright, I’ll pay” and they will use the program and the others will say, “Its too much I’ll never mind. I’ll do without it”. And everytime somebody says “Never Mind, I’ll do without it”, the program is going partly to waste. But the work it takes to write the program to any given level of power and quality is the same regardless of the number of users. In fact it might be even harder if you have fewer users helping you by reporting bugs. So, the same work is done. But only a part of the potential benefit is achieved.

The rest is deliberately inflicted waste which is practical material harm to the society. But because its inflicted by forbidding people to help each other it causes a psycho social harm which affects the spirit of co-operation, the spirit of good-will, benevolence, the willingness to help other people, just because you see that they could use your help. This spirit of good will is society’s most important resource. We depend on this so that we can have a liveable society instead of a doggy-dog jungle. And because this resource is so important the world’s major religions all talk about the importance of this spirit of good will of helping other people. For thousands of years moral leaders have encouraged the spirit of benevolence. So what does it mean when we see major social institutions telling you that you are not supposed to help your neighbour. They are polluting the society’s most important resource which is something that society cannot afford.

What does it mean when they say that if you share knowledge with your neighbour you are a “pirate”. They are saying that helping your neighbour is the moral equivalent of attacking a ship. If you don’t believe that, reject that word; its a propaganda word. And what does it mean when they start making harsh punishments for anyone who shares with his neighbour how much fear is it going to take to get people to stop helping their neighbours. Do you want your country to be pervaded by that level of fear? I certainly don’t. I hope you don’t either. This i think is the most important reason why software should be free. Because we must encourage people to help their neighbours, not discourage them. When I was a child going to school, the teachers were trying to teach us to share. They said, If you bring candy to school you can’t keep it all for yourself, you have to share with the other kids. They were trying to teach us to share with other people. Now the US today is the world leader in trying to stop people from sharing useful information with their neighbours. [Applause].

But the US is not the first country to make an effort to stop sharing. The soviet union did that too. Trying to crush the forbidden copying and sharing which was known as “Samisda”[?] You know dissidence did the same. You get a copy you put six carbons in your typewriter and you a copy and then you hand out those six copies to other people and they would type up more copies. The soviet union despite all its vicious repression was never able to completely stop the underground sharing that their people did. But they tried hard and they used several different methods. First guards checking all copying equipment, that’s why people had to it with carbon papers with typewriters because for every piece of copying equipment there was a guard check what you copied. Second : harsh punishments. Those who were caught doing forbidden copying could be sent to Siberia for years, were put in prison. Third: To help catch people they ask for informers, They ask everyone to wrap on their co-worker’s and their neighbours to the information police. Fourth to help catch people collective responsibility. “You. You are going to watch that group. If I catch any of them doing forbidden copying, you are going to prison. So watch them carefully.” And fifth, Propaganda starting in Childhood: To teach everyone that only a vicious enemy of the people would do this forbidden copying.

The US today is using all five of these methods to crush forbidden copying and sharing. First: Guards checking copying equipment. Well in copy store they have guards checking what you copy, to make sure you don’t do forbidden copying. But to have human labour checking what you are copying would be too expensive in the US. I guess they didn’t think of hiring people from India to do it. [Laughter] . So they are using robot guards. Programs that go in your computer and are designed to check what you are going to copy and stop you. Its a crime to bypass these robot guards.

Second, harsh punishments: Well, ten years ago if you made copies of something and handed out them to your friends just to be nice, that was not a crime in the US. It had never been a crime. And then they made it a felony. You could be put in prison for years for helping your neighbours. In Britain now they are proposing a ’10 year’ punishment. 10 year prison for sharing with your neighbours. That shows how far the repression can go when you try to stop people from sharing with their neighbours. When you try to prohibit their natural tendency.

And Third: Asking for Informers, In the US, there have been Ads on Television there were ads in the subways in Boston asking people to ??? on their co-workers to the information police, which there is called the “Business Software alliance” – a Terror organisation. And I say that after careful thought. In Argentina the business software organisation sent people letters threatening them with being raped in prison, if they shared with their neighbours.

Fourth – Collective Responsibilty: In the US this was done by Constricting Internet Service Providers to keep track of, they’ve been made legally responsible for everything their customers post. And the only way they can escape being punished is if they have an automatic procedure of taking down anything within two weeks of a complaint. So nowadays if somebody accuses, you don’t even get your day in court. your psych just gets unplugged. And that’s it.

Fifth – propaganda starting in childhood: That is what the word ‘pirate’ is for. When I went to school, the teachers tried to teach us the habit of sharing. Today according to the US government, teachers are supposed to teach, quote, Say Yes to Licensing, Unquote. So instead of saying “Oh you brought candy to school, well you have to share it with the other kids”. they say, “Oh you brought software to school, well, don’t share it. Oh no! sharing is wrong. Sharing means you are a pirate”. The US laws don’t apply in other countries. But the US is trying to push the same kind of laws in every other country. I hope you will spread the word that the India should _not_ adopt a law like the DMCA in the US. That is a tyrannical law. Its an Oppressive law and _you_ should save yourselves. Even if you can’t save us. So that is freedom 2: The Freedom to help your neighbour by distributing copies of the program.

Freedom3 – is the freedom to help build your community by publishing an improved version so others can benefit from your work. Now people used to tell me if the software is free that means no body will get paid to work on it, so nobody will work on it. They were confused by the two meanings of the word ‘free’. Because they thought it meant gratis which is not the case but none the less that was their theory. Today we can compare that theory with observed fact. And we see that hundreds of people or maybe thousands are being paid to develop free software and tens of thousands are developing free software as volunteers. And in fact we are developing large amounts of free software. What could possibly motivate these people? Well, I tell you I’ll tell you some of the motivations that I’ve heard people tell me.

One of them is political idealism. And the desire to contribute to a good decent society where people can help each other instead of to divide people and to keep them helpless. That is the important motivation for me but not everybody in our community has that motivation.

Second – Another motivation is fun. Programming is great fun. Not for everybody. But for some people and especially for some of the best programmers, programming is fun. That is why so many people after they do their job, which is software development want to develop some free software in their spare time. Because its especially fun, where you are your own master and no one can tell you what to do.

Another reason is to get appreciation. If you develop a free program that a hundred thousand people use you can feel really good. A lot of people will be appreciating you.

Another is profession reputation. If a hundred thousand people are using your free program that’s gonna impress anybody who might want to hire you.

Another reason is gratitude. If you’ve been using the community’s free software for years and appreciating how useful it is, then when you write a program, that could be an opportunity for you to contribute something back to that community to express your appreciation.

And there may be other motivations that I haven’t thought of and don’t know about. Any given person might feel a combination of several other motivations. Because human nature and human motivation are complex and money can also be a part of the motivation for some people those who are getting paid. When I released GNU Emacs after I while I got a message saying “I think I found a bug and here’s a fix”. And then I got a message saying “I thought this feature was missing so I wrote it and here it is” and then I got another bug fix and another new feature and another and another and another until they were pouring in on me so fast that just using all of this help was a big job. Microsoft doesn’t have this problem. [Laughter] [Applause]. You know I’ve never understood why that is so funny but people always do find it funny.

So, after a while people began noting the phenomenon that when a free program becomes so popular you often get a community of developers helping to improve it and free software started to get a reputation for being powerful, reliable software from the reports of the people who used it. And this was both good and bad. It led a lot more people to start using the free software especially in the 1990s. But at the same time we got lots of people coming into our community purely because the software was practically advantageous. It was expedient and they didn’t appreciate the freedom. They didn’t care and when they talked about the software to other people they didn’t even mention freedom as an advantage. They didn’t say the fact that you are free to co-operate with other people is an advantage. They just mentioned that it was powerful, reliable software and you could get it cheap. So then we got millions of more people coming into our community who never even heard anyone say that there is an ethical issue here. And eventually they formed a different movement called the “open source movement”.

Now I’ve been telling you the philosophy of the free software movement and as you can hear we sight both practical benefits and ethical benefits of having these freedoms in your use of software. The open source movement has practices close to ours, not identical. But the big difference is that they only sight the practical benefits. They don’t say that morally speaking this is the way it should be. They go to companies and say we think it would be advantageous for you if you do things this way. Well that is useful, they’ve persuaded some companies to release important pieces of software as free software. So practically speaking they contribute to our community but at the same time in the fundamental questions of the community we disagree completely.

What your views are that’s for you to decide. You might agree with the FSF, you might agree with the open source movement, you might disagree with us both; it’s up to you. But I’d like to invite you to support the Free software movement. After you’ve had a chance to think about the issues. and if you _do_ support us, please wave our banner. Our banner is the term “free software”. If you support the movement free software, say so by using the term free software. Its one of the ways to keep us in the public awareness so that our views and principles will be visible to people and they will have the chance to think whether they agree or not. Because the open source movement tends to get more support and businesses and those businesses tend to use their terminology and because they don’t criticise the practice of proprietary software their views are easier. They are less challenging ethically. So they get a lot of supporters who are not prepared to consider the ethical issues that we in the free software movement raise. So the result is that their name is heard more and we often get forgotten. If we were to raise this ethical issues so that people can think about it we need to get heard and you can help us with that by raising our banner the term “Free software”. So if you don’t have this freedom, the Freedom 3, the freedom to publish an improved version. That causes practical material harm because this phenomenon of community improvement if we don’t get powerful, reliable software. But it also causes psycho-social harm. Which affects the spirit of scientific co-operation. The idea that we have to work together to advance human knowledge if we are going to do it effectively. So that is freedom 3. The freedom to help build a community by publishing an improved version so that others can benefit from your work.

If you have all of these freedoms and the program is free software for you now why do I formulate the definition in this complicated way? Why do I not just say the program is free software if it comes with all these freedoms? The reason is that sometimes the same code can be free for some people and non-free for others. Now that might seem strange so let me give an example to explain how that happens. The biggest example of this that I know of is the X Window System which was developed at the MIT in, the Other MIT, in the 1980s and released as Free Software. So if you got their version you had all these freedoms. It was free software for you. But among those who got copies were various computer manufacturers who distributed Unix systems. So they took X Windows and they made the necessary changes to get X to run on their platform and then they compiled it. They made binaries and they put the binaries in their Unix systems and distributed just the binaries under the same non-disclosure agreement as all the rest of Unix. And then millions of users got copies of these binaries with no freedom at all. This created a paradoxical situation. If you asked “Is X Windows Free Software or Not?” the answer depended on where you made the measurement. If you made the measurement coming out of the developer’s group, you’d say “Here I observe all these freedoms. Its a free Software” If you made the measurement among the users you’d say “Umm… most of these users do not have these freedoms. Its _not_ free software.”. Well, the developers of X Windows did _not_ consider this a problem. Because they were not aiming to give the users freedom. They were aiming to have a big professional success. It was a big success. It set the de-facto standard. But in the GNU project, our goal was to give users freedom. To give you freedom. If the same thing that happened to X had happened to GNU, GNU would be a failure.

So I looked for a way to stop that from happening and the method that I developed was called “copyleft”. You can think of this a taking copyright and flipping it over. Opposite results. you see, copy left is based on copyright. We use copyright law in order to get these opposite results. Because normally copyright is used to stop people from sharing; to deny them the freedom to share. Whereas we when we use copyleft, we guarantee everybody the freedom to share in order to make sure that all of you get the freedom to share we have to make sure that those middle men cannot strip the freedom away. So here’s how we do it. First we put on a Copyright notice which says “This program is copyrighted” and then and by default you are not allowed to change or share the program. But then we say you are explicitly authorised to modify this program. You are explicitly authorised to redistribute copies of this program. You are explicitly authorised to publish a modified or extended version. But there is a condition. This condition is the reason why we go to all this trouble. The condition says: “Any modified or extended version or any version of this program you distribute must as a whole carry with it the same freedom that you got from us”. And so the result is that everywhere the code goes the freedom goes with it. Even if the program changes it still carries with it the freedom. So all the users get the freedom. The X Windows Problem did not happen for us. In effect these crucial freedoms that I explained to you becomes inalienable rights of users of our software.

So copyleft is a general idea. You can’t use copyleft like you can’t use the concept of a text editor. You have that specific text editor, then you can run it. and likewise to use the idea of a copyleft you have to have a specific license that you use. The license we use for most GNU software is called the GNU General Public License or the GNU GPL for short. Note that the ‘G’ in ‘GPL’ stands for General. Not GNU. We also have a couple of other copyleft licenses that are other more permissive in special situations. But mostly we use the GNU GPL. And in fact about 2/3rd of all free software use the GNU GPL. We also have a kind of copyleft license for manuals and text books called the GNU Free Documentation License. So if are writing a text book on any subject at all, I hope you’ll release it as Free Documentation under the GNU Free Documentation license. This license was designed to make it possible for commercial publishers to profitably publish free manuals and in fact there are some six free books that have been published commercially under this license. That’s not counting the manuals that we publish in the free software foundation.

So there is copylefted free software and there is non-copylefted free software. Both of them are free. The developers of the non copylefted free software like the X windows have respected your freedom. They are not trying to deny you any important freedom. The difference is with copyleft we go even further and we actively try and stop anybody from taking away your freedom. With a non-copylefted free software they are not actively defending you your freedom but they do not attack your freedom. So they are respecting your freedom. They are not doing anything wrong. They are just not doing as much right as they could do. It’s a very big difference. We don’t say that they are doing wrong. But we just say that they could do better, so that non-copylefted free software can be used in a free operating system like GNU.

And in fact I did decide to use X Windows in the late 1980s. I felt we should have a window system in GNU but before we wrote one there was one X. It was becoming popular, it did the job, it was technically suitable. So I said alright we’ll save trouble. We won’t write a window system of our own. we use X. So we started the other making the other pieces of the GNU system work together with X. And we put into the coding standards that if your program is graphical it should work with X. Through out the 1980s our mission was to come up with all the pieces we needed to make a complete Operating System. Now sometimes we were lucky and somebody else wrote the piece we needed or something that could do the job like X Windows. And when that happened we said “good we don’t have to write this piece”. We’d just use the piece that we found. But that happened or didn’t happen by chance. Because those other projects, they were not aiming to make a free Operating System. They had various different goals of their own. So it was just accident whether their software was useful for us and whether they made it free. Well, we were looking for opportunities to save the effort by using some existing software that we could find. Because the job of developing a whole unix like system was very big. Many people said it was so big we’d never finish it. Well, I thought we’d finish it but clearly we had to look for short-cuts. But when we didn’t find this existing software to use then we had to develop those programs or recruit people to develop them. And that’s what we did during the 1980s.

In October 1985 we founded the Free software foundation, which is a charity whose purpose is to raise money to promote Free software and in the 80s a lots of its activity was hiring people to work on developing GNU. Some important pieces of this system like the Shell and the C library were by the staff of the Free software foundation. But most of the work was done by volunteers. For instance I’m a full time volunteer for the free software foundation. Because the foundation doesn’t pay me. Now there’s a reason for that when the foundation first had enough money to hire one person, I, as the president had to decide who to hire. And it was my responsibility to spend the money effectively. So I realised that paying st(.*)nous[?] salary would be like throwing the money away because we could get st1n to work for nothing. So I decided to hire someone else instead. And now a days though there are many full time volunteers for the GNU project, most of them are getting paid by somebody else. So for the FSF they are volunteers. There are also thousands of part time volunteers who are contributing their spare time and don’t get paid for it but they still get a large amount of work done. In the 80s and in the early 90s it was possible to doubt whether free software could actually develop the full spectrum of software to fill the public’s needs. But nowadays we are pretty close to doing the whole thing already. So there’s no long any possible doubt that we can’t do the job.

The only question is whether we will be allowed to do the job. But that’s getting ahead of things. By 1991 the job was almost done. We had almost all the pieces necessary but there was one major gap still – the kernel. Now we started developing our kernel in 1990. Again we were looking for a way to save time by finding something we could start with that was already working and we found an already working micro kernel called ‘MACH’, developed at Carnegie Mellon University. So MACH did the lower level part of the Unix kernel’s job. So we had to write the upper half and we were going to do that by writing a collection of servers that communicate through message passing. And this provides all sorts of technical advantages, greater power. And we thought that because these were effectively user programs it would be easier to debug them unfortunately that’s not so. That wasn’t so. The Debugging facilities were lousy and these programs were asynchronous so they can have timing errors that were not reproducible. It took many many years to get this collection of servers which is called the GNU/Hurd to run. We call it the GNU/Hurd by the way, because Gnu’s in Africa live in Herds. So this is a herd of GNU servers or GNU/Hurd.

Fortunately we didn’t have to wait that long, because in 1991-92 a Finnish college student called Linus Torvalds wrote another free kernel, well he wrote a kernel and at the end he decided to make it free software and he released it under the name “Linux”. He used to monolithic approach that had been used before. Well we didn’t know about Linux. Because he never contacted us to tell us about it. But he announced it on the network somewhere and people who knew about it said “Let’s see if we can find all the other parts of an operating system so that we can make a complete system.” So they looked around and lo and behold, everything they needed was already there. What good fortune, they said its already available, but there was no rock about it. What they had found were all the pieces that were going to be the pieces of GNU! So in fact what they were doing was fitting linux into that gap in that GNU system to make the combination of GNU + Linux. The GNU/Linux system. But they didn’t realise that. They didn’t that they were finding all the pieces of the GNU system. Therefore they were starting with Linux and finding these other pieces and putting them on top of Linux. So they call that a Linux system which they really shouldn’t have done. They had no business calling this version of our operating system by some other name. But that’s what they did. And the misnormer got imitated by other people, and that’s how it happened.

That we developed an Operating System that’s used by some 20 million people and most of them don’t know its our system. They think it’s Linux. They think it was all started in 1991 by Linus Torvalds. Well, the development of Linux, the kernel was a major contribution to our Community because that was the step that took us across the finish line. Because before that we had 95% of the system but it wasn’t capable of running by itself. So you take parts of that system and install them on top of another operating system but you had to get another operating system to start with once that last gap was filled that made it an entire operating system. So you could put it on a bare PC. You didn’t have to have some other operating system first. And in fact that meant that the goal we had set out for in 1984 had been reached. It was a Free Operating System that you could run on a modern computer. So you could actually live in Freedom. You could install this free software, you could refuse to use any proprietary software and then you would have freedom and you would have the freedom to form a community with other people the freedom to cooperate with others. So you could live an upright life – a happy life as a computer user.

But, the error of calling the entire system Linux, was a major blow to the Free software movement. Because it broke the connection from our software to our philosophy. Before that people who used these pieces of GNU on other system they knew they were using pieces of GNU. So they thought of themselves as GNU users. They became the fans of GNU. And so when they saw the things we had put in there to describe the philosophy they would think about it seriously at least sometimes they would. Because they realised that this was the philosophy behind the software that they liked. So that was the reason to at least give it a serious consideration. And that philosophy I had been telling you today. Well, after thinking about it, some of them would agree. And if they agreed they then feel a motivation to develop more software for GNU. So the software helped to spread the philosophy and the philosophy helped to extend the software. But when people started calling this entire GNU system Linux, this connection was broken and instead the software lead people to a different philosophy. The philosophy associated with the name “Linux”. Which was the apolitical philosophy of Linus Torvalds. He didn’t like considering these things as ethical or political issues. He just put that it in terms of what’s practical. He didn’t say that software should be free. He sometimes develops and uses non-free software. So the result was here was this system that’s basically GNU and it was attracting people over to the other philosophy and not to ours anymore. It was a real problem. By the way, the other philosophy was the one that later on became the philosophy of the open source movement.

So the result is that if you look around on our community, most of the users of this version of this GNU system have never even come across the philosophy that motivated us to do all this work. Sometimes people say to me when they hear me making efforts to ask people “please call the system GNU/Linux”, they say to me it looks bad to ask for credit. It looks like you’re just being selfish. So it would be much wiser to let it drop and when people call the system linux, smile to yourself and take pride in the job well done for this would be a very wise advise except for one mistaken premise. The idea that the job is done. We have a lot of work to do. We’ve made a great beginning but we haven’t finished the job. You see we’ve developed free systems that are used on some 20 million or so computers but that’s a fraction of all the computers that there are maybe 5% I think I heard. And that means we have a lot more to go. We have a large range of free software now, but there’s still other programs that users would like. We have to develop those. We have to make sure that you have free software for every job.

And there are laws being passed in some countries that prohibit us from developing free software for certain jobs. We have to do what it takes to overcome those obstacles, repeal those laws whatever is needed. It is going to take determination. Some of these jobs can be done just by writing software and people will do that because its fun in many cases. But overcoming these obstacles takes more than just fun, it takes the kind of determination people show when they know that they are fighting for their freedom and for their communities. So we have to teach people that.

But if you look around in your community today you’ll see every where you look most of the institutions in our community are calling these systems linux and not presenting freedom as the goal and the result is when I talk about the importance of freedom I get responses like “This idealism is bad for the success of Linux”. They say “what does this got to do with me? I’m a linux user”. People call themselves Linux users that means people use the GNU/Linux system but when they hear about the philosophy behind GNU they say “What does this have to do with me?” because they don’t see any connection between themselves and GNU. If they knew the origin of the system that they’re using they would see the connection and the name GNU/Linux shows people that connection. And then there’s the others that say “This Idealism must be impractical and its bad for the success of Linux”. There’s so many ironies in that. One of them is What do they mean by success of Linux? Well they are really talking about the success of the GNU/Linux system, but what does it mean for that system to succeed? They think it means just to have a lot of people running it. And never mind how. Never mind if these people run it together with non-free software. Because they are thinking of success as nothing but popularity, which is irrational. It’s actually an example of mental inertia. You see, they copy that idea of success from the proprietary software world. In the proprietary software world at least its rational. Why do they want their software to be popular? Because every user is supposed to pay them! so more users means more money. It’s an evil system but at least they’re being rational in that part of it.

When you copy this definition of success over to free software it doesn’t make any sense at all! You know why does it matter how many people use that free kernel linux? It’s a kernel, it does its job, but is the number of users of that kernel really important? I don’t think so… And why does it matter how many users are using the GNU/Linux system or any variant of the GNU/Linux system? Now I might feel something about it because I launched it. But that’s just ego. Really is it important how many users this system has? I don’t think its of any real importance. The important thing is to spread freedom to as many people as possible and ultimately to everyone. That’s the goal that’s worth striving for. We have to remember that goal. Because the most important thing for reaching a distant goal is to remember the goal. If you forget where you’ve headed you’re going to end-up somewhere else! and is idealism really impractical? Not at all. If you are a distant goal, there are only two ways to reach it. One of them is to have a lot of money. And the other is idealism. Because idealism will enable you to keep on going until you get there, otherwise you’d just give it up. So we don’t have a lot of money. So we have to have this idealism instead. there’s nothing more practical like idealism. The GNU system and the GNU/Linux variants are our idealism made real. But, very few people are saying this to the users of GNU/Linux. Most of the institutions in our community call this system as Linux and they don’t say these things.

Consider, for instance, the companies that package this system, that package this GNU/Linux system. Well, they all put some non-free software on the CDs, Yes, its true that you can get a free Operating System to run on your PC, but its not easy to find one. If you go to the store and buy something that says a version of the GNU/Linux system which says “Linux” on it, it will always have non-free software as well. You have to be an expert to know what to get rid of. And then what about the magazines dedicated to the use of the GNU/Linux system. Typically these magazines call themselves Linux Something…..

So I have a different term, I call them freedom subtracted packages. Because if you have installed a free GNU/Linux system, if you are enjoying the benefits of freedom that we’ve worked so many years to give you, those packages give you the opportunity to buckle on a chain. And what about the trade shows about the GNU/Linux system, they typically call themselves Linux-something or the other and they host companies advertising non-free software so when in effect the trade show gives a seal of approval to non-free software. And what about the user groups for the use of the GNU/Linux system most of them call themselves linux user groups and they typically invite salesmen to come in and present non-free software in effect giving the group’s seal of approval to the use of the non-free software. Now I would like any linux user groups to become GNU/Linux user groups and to take a stand on freedom. To stand up for freedom and give GNU the credit for launching this system. Now I believe that there’s a Linux users group here in Chennai and I hope that you will become a GNU/Linux User group. Please tell me if you do. We have a page where we list GNU users groups and GNU/Linux user groups. So if you become a GNU/Linux User group, we will list you there.

But in any case in our community therefore most of the institutions are talking about Linux and they are not standing up for the philosophy of the GNU. So the only place you see this free software philosophy generally is in association with the GNU name. This is why it makes a difference when you call the system GNU/Linux because it shows people a connect between them and their system and GNU and the Free software philosophy. It will help people lead people to this philosophy so that they can think about it and may be get motivated to get help work for freedom. And we’re gonna need a lot of work. In the US today, there are too different kinds of laws prohibiting free software. One is the Digital Millenium Copyright Act, which has been used to prohibit free software for jobs like playing a DVD, listening to an audio stream, reading an e-book. Its a narrow range of jobs but they are very important jobs. If users can’t do that with free software, free software is in danger.

And the other problem, the even bigger problem, comes when patents are applied to software ideas. When software ideas can be patented and this is dangerous for free software development because its dangerous for all software developments. Programs tend to be complicated these days. One program will have a hundred ideas in it. Well, if ideas can be patented, if software ideas can be patented then any one of those hundred ideas might be patented by somebody. So even then you get sued if you wrote the program yourself. Without software patents you can be confident. If you wrote the software program yourself, if you didn’t copy the code then its legal and you’re not gonna get sued for writing it. But with software patents you are quite likely to get sued for writing it or at least get threatened. You can’t do this, you can’t write such a program. And the worst thing is if there are a 100 ideas 5 or 10 of them might be patented by 5 or 10 different companies. So you get one of them and when you’re finished with doing it one another comes along. So it’s constant trouble for any software developer and even for software users. So all the companies in India that use software have to recognise that software patents are a danger. All the companies in India that develop custom software, because it’s typically custom software that’s developed by Indian companies they have to fear software patents because those custom programs sometimes use many ideas too. And they could get sued for writing those programs. So software patents are a danger.

Fortunately the Indian Government seems to be aware of this. So there’s a good chance that India will resist the danger of software patents. But don’t leave it to chance. Make sure to spread the word, especially if you know companies that develop software or companies that use computers and software. Make sure they understand how dangerous software patents can be. Now why do we in the free software movement particularly pay attention to this goal, to this issue? Because we want to write a full range of software to do all the jobs that published software does. Custom software are a different area. We’re talking about published software. But we want to do all the jobs that published software does. So that means we gotta be allowed to do every job. If many of the jobs are prohibited for us, we can never attain our goal. We can never attain our freedom all across the globe. I should explain that the issue of free vs. proprietary software arises for published software. It doesn’t arise for typically custom software; there you know if you write the program for one company and they use it in-house. Well, they do have, presumably, they do have full freedom. They are not obligated to ever release it. But they have the freedom to do so. So it’s fine.

The ethical issue I’ve been talking about arises when software is published – when its available for users to get copy. And by the way, one consequence of this is that most of the jobs in the software industry are not really going to be affected by free software. It’s true that some jobs that involve developing proprietary published software may go away. There would be a certain number of free software jobs replacing them and we don’t know how many there’s going to be in the future. But then there are going to be all the custom software jobs and they may remain or a large fraction of them are likely to remain unchanged. And this is, by the way, an answer to the question of how a programmer is going to make a living when all published software is free. Well one way is if worse came to worse, they could have jobs writing custom software and they could write the free software in their spare time for fun. But in fact there are jobs writing free software and companies support these jobs in various ways. We don’t really know whether a free software will have more jobs or fewer jobs developing published software than today’s world. There’s no way to tell except to try it. But I believe, because there’s an ethical issue here, software must be free in order to treat the users decently. That we are better off having free software even if it’s less software.

A non-free program is not a contribution to society. Its a pit for users to fall into with bay at the bottom. Because it looks attractive. If you are thinking short term, if you don’t value your freedom, you might be attracted to that bay and then you might get into the trap. And then you might starting other people to get into the trap. And when you are in the trap you’re divided from every body else. you know its not a trap where you are all in there together and you can work to get out. Its a trap where you are divided. And you are kept helpless. That’s what makes it a trap. So we have to recognise just the fact that you can make money, there’s nothing wrong with making money in enough itself. But just making money doesn’t justify mistreating other people. Developing non-free software is mistreating other people. So don’t make a living that way. Find some other way to make a living. A way that involves ethical behaviour. So, sometimes people have criticised me for my ‘holier than thou’ attitude. Well they are right. I’m supposed to be holy. Oh, oh, I’m attached to this. Its my job because I’m a saint (wears the black robe and the halo hat). I’m not going to be able to keep this on for a very long time in this hot weather.

I bless your computer my child [Laughter]. I’m saint IGNUcius of the church of Emacs.

Emacs started out as a text editor but it became a way of life for many computer users and then a religion.

In fact there was an alt.religion.emacs newsgroup back around 1990. I don’t know what it was used for because I never read net news.

But so, emacs became a religion. We even have a great sism[?] between two different versions of emacs.

And now we have saints, fortunately no Gods yet. [Laughter]

To join the church of emacs you must repeat the confession of the faith three times. You must say, “There’s no system other than the GNU. And Linux is one of its kernels.” [Laughter]

The church of Emacs has some advantages compared with some other churches because to be a saint in the church of Emacs does not require celibacy [Laughter]

However it does require making a moral commitment to live a life of purity and then living by it.

You must exorcise the evil proprietary operating systems from all the computers you control. And then install a wholly free operating system instead. Because wholly can be spelled in more than one ways.

And then only install free software on top of that.

If you make this commitments and live by it, then you too would be a saint and you too may eventually have a halo, if you can find one because we don’t make them any more. [Laughter]

Now sometimes people ask me “In the Church of Emacs, is it a sin to use vi?”. The answer is that “Using a free version of vi is not a sin its a penance.”

And people sometimes ask me if my halo is really an old computer disk. [Laughter] this is no computer disk. This is my halo. But it was a computer disk in a previous life. [Laughter]

So, ‘happy hacking’ every one, and now I’ll answer, oh by the way, I have some stickers here to give out. So let me put the stickers somewhere over at this side and then you can take some as you’re going or whenever and take as many as you can make good use of. Who wants to take these and hand out giving them out. Ok you can do it [Srini comes up]

Basically go stand somewhere in the back and as people are leaving, if you have to leave now, you can get some stickers. There are a few different kinds. The best use of them is to put them in a place where they will stay permanently, so people will keep on seeing them and keep on doing some good. So lets see if this will reach here. So how are we going to do this? is there are spare microphone for the audience?

What we should do is everybody should come down and stand here. Get in a line to ask questions. In that way whenever we’re done with one question the next person would be right there ready to ask. So please if you want to ask a question form a line over here in the middle. And then we’ll have the microphone right there for you.

Or you can leave. You’re free. And please speak as loud and as clear as you can. Looks like we’re having technical difficulties. [Laughter].. Let’s see if he can fix them.

[RMS yawns] MIC-TESTER: Hello… testing… testing…

Questioner: RMS, I’m just curious to know what is powering your laptop?

RMS: I’m sorry I couldn’t understand what you said. Please try to speak as clearly and slowly as you can. Try to make every sound be heard.

Questioner: I was just curious to know right now what is powering your laptop.

RMS: What is running on my laptop?

Questioner: exactly.

RMS: I’m running Debian GNU/Linux

Questioner: That’s great!

Audience: [Applause, Whistles]

Questioner: I sometimes wonder whether these strong division between GNU on one hand as a philosophy, moral standing and Linux on the other hand really lets say puts the whole community thinking forward or whether it hinders it on the other hand. See I give you a question: We had right, in Germany,[…][inaudible]

RMS: I’m having trouble understanding, could you speak a bit slower and try to make sounds clear?

Questioner: Okay. I wonder whether the attempt to show the strong differences from your view point between GNU on one hand and the [inaudible] Linux and the Open Source movement on the other hand whether this way of separation helps the community at all in the moral standing you are trying to promote? We had in Germany for example, the last week the problem that our govt had to go for new operation system for its complete set up and it was something Microsoft versus the open source linux community. The…the… moral undertuned[?] [inaudible] between the whole thing … uh… sounded almost the way like you tried to explain… GNU here. So is it really fair to try to separate these so strongly or wouldn’t it be better to try to work on the similarities between both ideas.

RMS: Oh. I’ll tell you why its vital to express the differences. The reason is that we who talk about freedom as a goal are a minority. And we’re easily forgotten we could be completely ignored if we don’t work to spread these ideas. And you can see that happening constantly. There are constantly articles being published in the press about the use of this version of the GNU system. Which treated just as a commercial alternative and never mention freedom at all. There are many people talking about it that way. And those people generally use the term open source that’s the term they chose for their, for what they choose to say. Well, we who want to work towards the goal of freedom, we have to make our ideas heard. If we use the term open source. If we call the system linux, we’re going to be confused with every body else. I’ve seen this happen many many times.

Questioner: You mentioned Freedom 0. Which is the right to use…

RMS: Right to run it.

Questioner: …run for whatever you wish to. Now we have something called the SCCA. I could be wrong with the number of ‘C’s in there. Which makes it mandatory for any program to build copy protection…

RMS: [interrupts] basically the SSSCA is a proposed law in the US which has a substantial amount of opposition and which we think will not pass. But we’re working on opposing it. Some big companies are also trying to oppose it. We’ll see what happens. But indeed that law would be an… A vicious offence and it would prohibit free operating systems. Yeah, basically there’s no limit to how bad a law can be.

Questioner: Ok, I have this [inaudible] […] freedom zero.

RMS: I’m having trouble hearing you at all because the sounds are not clear. Try to enunciate the sounds clearly.

Questioner: Again in conjunction with Freedom 0, there is for example, we know about… the ASP hole in the GPL as of now.

RMS: We don’t have a what?

Questioner: The ASP.

RMS: You are talking about the ASP issue. Let me explain what that is… The issue is the GPL says that you can release the modified version to the public but you are not required to. you can make a version and use it privately yourself. And that’s important. That’s an important freedom. but there are come programs which are designed [coughs] to provide network services to the public. And there, [coughs] the original developer can feel very bad if somebody else gets a copy modifies and improves and sets up a network service himself. And then you see he’s never releasing his improved version. So the result is that his improvements never become available to the initial developer. So we are about to try out a clause that can help with this problem. Which says that if you are using the program to provide network services to the public, then you must have a command in the server which allows the user to download the source code from your server, because you see, we believe that you have the right to make modifications for your private use, but setting up a public network server is not really private use. its a different kind of a publication. you can think of it as being analogous to public performance of a piece of music. And so, it seems legitimate in that case to say, if you are inviting the public to come and use your server you must also let the same public get your modified source code. Now this would be an option. This wouldn’t apply to any existing software. Because in order to make it apply you have to release your initial version so that it has this download command.

Questioner: My…

RMS: [interrupts] So this were thinking of putting this version into GPL version 3, and when we do it not change anything for any existing software. But it would mean people can develop programs that activate this clause and then it would apply, but only in that narrow situation.

Questioner: My question was actually analogous to the ASP situation. Actually what can you do… what can the… uhh… FSF do if somebody takes a version of the GNU/Linux kernel and puts it in an embedded system and adds various copy protection routines to that system and distributed as… you know… Effectively as ICs or even as devices which people can buy like the playstation or [inaudible]

RMS: Well, they are allowed to do that. And if you can’t, you know the hardware doesn’t give you a way to install software well we don’t insist it has to give you a way to install a software. On the other hand they will be required to publish a modified version of their source code. So people could use it in making some other kind of device. I think its time now to give the next person a chance to ask questions.

Questioner: Umm… It is public information…

RMS: [interrupts] I’m sorry I cannot understand you. Please try to make every sounds clear. I’m hard of hearing and there’s a lot of noise here…

Questioner: ok. I’m sorry…

RMS: [interrupts] and […][inaudible] accent is very strange to me. With all those three things together it is almost impossible for me to understand any word you say.

Questioner: It is public information that you favour the Debian Project.

RMS: I’m sorry I can’t understand. Can you enunciate each sound clearly.

Questioner: It is public information that you favour the Debian project and you also run the Debian GNU/Linux operating system on your laptop and so it is… it… the Debian project has been happening for a very long time now. Why is it that you filed for a develop… Developer so late in november last year as opposed to earlier say…

RMS: [interrupts] I’m having trouble. I heard the first half, but when you started saying the actual question ‘why is’ I couldn’t hear it. could any one.. Can you repeat to me what he asked [pointing to Dr.P.Sriram]

DPS: [inaudible].. his question is basically why did wait so long to become a Debian developer.

RMS: It didn’t occur to me that it was a good thing to do [Laughter] unfortunately it looks like my application has been put on hold because I have not had the time to package a program and two overwhelmed with works so I can’t do it. Its unfortunate, I hope I’ll be able to get to it sometime soon.

Questioner: What do you think has been the impact of the Free software movement in India as such. What do you think needs to be addressed?

RMS: Did you say, what is the impact of free software movement in India?

Questioner: yeah

RMS: Well, some Indian govts are now starting to actively sponsor free software use and development. In… For instance govt departments in Kiosks, in schools. It’s just beginning. But we have hoped that this will spread a lot more. And it has the potentiality to help with the elimination of the digital divide. Because its hard to put very many computers into the hands of villager’s schools when you have to pay Microsoft and Adobe and all those companies for licenses. you know you could spend that same money on computers it would be much better and you could get a cheaper computer because GNU/Linux is more efficient that would be better too. And not only that, when you have free operating systems in the schools in these villages that provides a great opportunity for anyone who wants to learn to do system administration or.. or programming because they can actually read the existing programs and then they work on them. They can learn by doing. Learn by tinkering.

Questioner: therewasthisarticleyesterdayonslashdot…

RMS: Slow down please…

Questioner: There was this article yesterday on slashdot where you were quoted as saying that the HURD is of age. In the sense that the HURD is going to be independent and the HURD kernel….

RMS: [interrupts] Not that its going to be available, its likely to be available. That it… it… its a… its a.. An estimate, not a promise. I see so many people getting that wrong. The article said it right but various people repeated to me leaving out that crucial point. I don’t know. But what I’m saying is … its close.. its so close now already. but there’s not much further to go, the GNU/Hurd system which is the GNU system using the GNU Hurd as its kernel, its basically working now… and Anand Babu one of the main Hurd Developers, he is in Bangalore, his name is Anand Babu, he showed me his laptop with GNU/Hurd running on it. There were a couple of missing features that I think are pretty important but they… they… they wont be too hard. They should get done this year I expect.

Questioner: assumingthatthehurdsystemisready…

RMS: S L O W E R ! P L E A S E…

Questioner: Assuming that thehurdsystemisreadysoon…

RMS: I’m sorry could you repeat what he said? [pointing to Dr.P.Sriram]

Questioner explains to DPS and the first few words are heard… “Assuming that the hurd system is ready soon [inaudible]”

DPS: Assuming the Hurd system is ready soon do you see it competing with the Linux?

RMS: Well, the Hurd is not a _system_. The hurd is a _kernel_. The Hurd and Mach together are a kernel. And linux is also a kernel and yes, they _are_ alternatives. So it will in some ways compete. Both of these kernels are used in the GNU system

Questioner: Ah, good evening Mr.Stallman. My question to you is, How do I build a successful software model, business model based on free software because it has become increasingly difficult to convince the PC community about… Because the first quote […][inaudible] is do you have a software which is proprietary, which is close so that it can cause entry barriers for other people. So what would be your advise to people like us who can convince the PC community.

RMS: can you repeat it for me? [pointing to Dr.P.Sriram]

DPS: What would be your advise to developers who are looking for funding… who are looking for the… the… funding people… the.. the… venture capitalists.

RMS: oh, give up on venture capitalists… thats the wrong approach…


RMS: But you don’t want to start a company funded by a venture capitalist anyway, because in a year or two they would take it away from you and kick you out. I mean its really a stupid way to do anything. The only reason anybody would do that, is money is the most important thing to that person and he’s desperate to get rich, which is stupid.

Questioner: Thanks

RMS: Now there are people who have found ways to make a living doing free software for instance there are companies that configure and set up machines for clients using free software and then writing additional stuff to do what the client wants. And that is the way people can make a living. And they support people developing free software so that’s.. you know, that’s something to consider. It doesn’t lead to getting rich. But of course most companies that people start are not successful anyway, they may think I’m going to get this venture capital and I’m going to make a big splash and I’d get very rich. And chances are it just goes broken in a few years. You know, over 90% of the time it fails within a few years, the cases that are successful are very few. So really, if you think of that as a way to succeed you are deluding yourself anyway.

Questioner: The GNU/[inaudible]…[inaudible]…[inaudible]…[inaudible]…

RMS: Okay could you please repeat the question? I didn’t hear anything.

Same questioner: The [inaudible]…[inaudible]…[inaudible]

RMS: No. Please, you repeat the question because you heard it. I know I can hear you.

DPS: The GNU Hurd and GNU linux. They share a lot of things. Why don’t they work together? including ideas. They share a lot of ideas. Why don’t you work together closely?

RMS: Now this time I couldn’t really hear _you_. Its really hard…

MIC-MAN: check…check…

DPS: I’ll try…one more try. The GNU Hurd system and the GNU Linux system share many things. Including ideals. Why aren’t they working closer together.

RMS: well, they are basically working pretty closer together. Most of them is the same. Its just the kernel that’s different. Well the… well the C library has to be fairly different as well.

Questioner: [inaudible]… the kernel groups to join together.

RMS: You know the… the user space programs are basically the same. The same source typically run with both kernels.

Questioner: [inaudible].. the kernels… the kernel groups to join together.

RMS: I can’t hear you at all. I’m sorry.

Questioner: The KERNEL GROUPS to join together.

RMS: Oh that wouldn’t work at all. And the reason is that the two kernels are totally different. They have so little in common it’s just not useful for these kernel groups to join together. The design is totally different. you know, one is a monolithic kernel and the other is a micro kernel design. Which Linus Torvalds doesn’t like. Also… [Laughter] So you can be sure he’s not going to wanna work on the Hurd.

Questioner: You were talking about patents for software ideas. Which you wanted to prevent. Are such patents currently in force in the US?

RMS: Yes. Software patents are… exists. They’re more than a hundred thousand in the US. There may be several hundred thousand by now. And its a big problem. There are a number of free programs that we don’t have. More at least in the US you can’t find them. Because they’ve been driven underground.

Questioner: What do you exactly mean by patents for software ideas? Ideas in the sense algorithms? data structures? and such things..

RMS: [inaudible] yes. An algorithm could be patented, or something more general than an algorithm could be patented. Or a feature could be patented. Or an idea for data format can be patented. Or an idea for a protocol can be patented. Uh… for instance the LZW data compression algorithm used in GIF format is patented. So you can’t write a program to generate compressed GIFs in the US without getting a permission from the patent holder. That’s just one example but there are many examples. there’s too many for me to keep track of.

Questioner: When there are too many things to keep track of, naturally there’s a possibility that somebody develops something on his own which by mistake, maybe similar to a patented thing, so how do I resolve such issues?

RMS: how would what? how… I didn’t hear the very end. I heard most of it. The last sentence I didn’t hear.

Questioner: How do you resolve? like accidentally… Because the ideas…

RMS: [interrupts] ok. Ok. Now I heard you. What happens is the patent holder will threaten you and either say, you just have to stop or he’ll say I’ll let you continue if you pay me a lot of money. And at that point you can either ‘give in’ you can either…[interrupts] when he just says stop, you have two choices. you either stop or you either go to court. If he says in order to do this you have to pay me a lot of money, you have three choices. you can stop. you can pay him they money or you can go to court. Now if you are doing this in a company then maybe you can afford to pay. But if you are doing this as a volunteer, you’ll probably don’t have the money to pay. And usually they demand a price per copy. Well, with free software its impossible to collect a price per copy because we can’t count the copies. Its literally impossible, even if it were one thousand of a rupee per copy, we couldn’t pay it because we can’t count the no. Of copies.

Questioner: I have two questions. The first one …

RMS: [interrupts] Please speak loud and clear!

Questioner: I have two questions with me. The first one is whenever I go in for a new system why is it that it always carries the tag “Microsoft Operating system Preloaded”.

RMS: Could you repeat… I couldn’t understand that. So could you repeat it?

DPS: Its really a hardware question.. When you buy a new PC, why does it say Microsoft Software Loaded.

RMS: Well, I mean… I don’t know. I mean… you know much about this as I do. I think the reason is that Microsoft effectively has a near monopoly and because of that the PC companies think that all the users are going to want Microsoft. I think its unfortunate, but I can’t tell them what to do. Your second question?

Questioner: Take for example IBM, ok? he says that some of his models are Linux compatible. But why is it that he does not favour a system which is shipped with Linux?

RMS: Oh, they are equipped with GNU/Linux. But IBM calls it Linux which is not right but I didn’t hear the other word so maybe you could repeat the question to me so I can answer that.

DPS: you know… IBM has both… Microsoft loaded and GNU/Linux compatible. Why aren’t they loading their machines as loaded with GNU/Linux.

RMS: Why aren’t they whatting their machines?

DPS: Labelling. Putting a tag.

RMS: Labelling them. I don’t know you have to ask them. But… you know… I know that they wouldn’t label them as GNU/Linux because they don’t call it that. They might label them as Linux if you ask them to but they might have some reason why they don’t. Who cares. I don’t know. you have to ask them.

Questioner: Many people argue that … the… the philosophy of the free software can be arbitrarily applied to any other areas as well. Like production of music… writing books… or even digital logic circuit design… so…

RMS: Oh I couldn’t hear that…

Questioner: Chip design. Chip design for example.

RMS: chip… oh Chip design. Oh well, yes and no. Basically you could try to apply it to any kind of information but its not equally important for all kinds of information basically the area for which it’s important is functional information. Information typic… basically that ordinary people could use to get something done. So that includes programs and recipes for cooking and dictionaries and encyclopedias and manuals and text books… Chip designs because they can only be used by Chip fabrication plants, I think they are a less important issue. But yeah they could be free… And there are people starting to work to some extent on free chip designs and on free hardware designs. I don’t think that free hardware designs are vital. However its nice. So we do say its a good thing when people work on free hardware designs. Because its a lot of work to build hardware from a design. You can’t just type ‘build’ and has something build the hardware for you. Well it doesn’t raise the same important ethical issue that the issue of free software raises. It’s just nice if the hardware design is free.

Questioner: and does that have anything to do with the fact that its a lot of money to develop hardware.

RMS: I didn’t hear any of that could you repeat it for me?

Questioner: Is it also because one has to spend a lot of money to develop hardware? to develop chips?

RMS: Not really. In that… that would not be a primary issue if that were the only one I don’t think it would convince me. But the fact that you need a lot of money to _build_ the hardware that its not the kind of things individuals typically can build. And if you do its a lot of work anyway. Because of that I think its a less important issue ethically.

Questioner: thank you very much.

Questioner: I have a question in the subject of kernels. The Linux kernel is a monolithic kernel. On the other hand the Hurd for example is a Micro Kernel. Now linux grew out of the Minix project. In 1991 when Torvalds posted to comp.Operating System.minix newgroup about linux, he was very severely criticised by Andrew Tannenbaum because he believed that Monolithic kernels… they are technically inferior…

RMS: I… I have a trou… I think I know what you are talking about but I can’t hear you most of the words. If you could make it brief and then he could repeat it then I could try to answer you.

Questioner: I’ll make it brief. A monolithic style was considered technically inferior, but it has proved to be a more practical style for kernels. Why is this so?

RMS: Could you repeat it now?

DPS: umm… Monolithic vs. Microkernels… the success points to you know that Monolithic kernel can work.

RMS: And therefore… what’s the question?

Questioner: A monolithic kernel style was considered to be technically far less inferior as early as 1991 but yet even 10 years later the most practical kernel that we have today is a monolithic kernel. Why is it that even in spite of being technically inferior it has proved to be practically more feasible alternative.

RMS: Ok, I didn’t hear it so you could …[inaudible]

DPS: The monolithic kernel would be considered technically inferior. Yet it is so popular why?

RMS: Well, I don’t have any …[inaudible] which one is superior. What I see is that the micro kernel design with multiple servers offers some advantages and power and flexibility. There are many things you can do with it that are hard to do with a monolithic kernel. On the other hand, Linux has had an advantage in speed and reliability. Now we have partly closed the gap in reliability, not totally. As for speed its less important now because the computers are so damn fast. So which one is really going to be technically better? I don’t know. But I’m glad that people are working on the hurd and make it as good as they can.

Questioner: I have one more question. You have said that people calling the GNU/Linux system as a Linux System and forgetting about the GNU philosophy is a very bad thing. But my question is how serious is this problem: For example there was a student in my class who believed that the linux kernel itself was actually written by the Free software foundation and he thought that all linux software are actually GNU software. So my belief is that people are not at all ignorant of the role of the GNU and of the philosophy of the GNU. So how serious is this…

RMS: [interrputs]… Very serious. And most of the users have heard of the philosophy of the GNU and most of them have barely heard the name of GNU. If they’ve learned about GNU the fraction who’ve learned about GNU at all they think… most of them think, that GNU was a project to develop some software tools. And that there was no particular overall reason why we were doing that. We just felt like doing that. Because you see, if you think at it that way, the whole logic is gone! there was a reason why we developed a free Operating System. Its because the Operating System is the first thing you need to run a computer. And with an Operating System you could run your computer. So that has to be… so everything we did was all arranged with a logic of making it possible to have freedom in community. But the picture… those fraction who hear about GNU at all… the picture they get is wrong. And it leaves out the most important logic of it which relates to the ethical philosophy a year ago I gave a speech in the Netherlands and someone came up to me afterward and said, I’ve been using this system for 5 years and this is the first time anyone told me that the purpose of it is for freedom. So if… he wasn’t just a new comer. He is a person who works in a free software company. And yet, he never heard of this. So I believe you that you heard a person who got the opposite misunderstanding. All sorts of misunderstandings are possible. But I can assure you that the most common misunderstanding is the idea that Linus Torvalds started everything in 1991 and that the purpose of it all is just to be powerful and reliable and that its fine if you use non-free software with it to make it more popular. And that this is more common than a correct understanding. The misunderstanding is more widespread than the truth.

Questioner: thank you

Questioner: yeah…ahh… There was a mention in the Linux Gazette of this month saying that the G N U… GNU will be stopping the manuals… the publishing of manuals in the distributions… it basically said something like…

RMS: we’ll be doing what?…

[tape exhausts]

This Documentation is released under the GNU Free Documentation license. Please take a look at for more information on the Free Documentation License.

Copyright © 2011 Vignesh Nandha Kumar.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

Make your Javascript work perfect anywhere

For the past few weeks, I had a chance to work closely with Javascript and to understand it better;). I hope this post on my discoveries will help someone. Note this post is only about the cross-browser issues in javascript those I came across; I hope to write another post on general javascript tips.

One very basic thing you should always keep in mind while javascripting is that,

The environment on which your code will run is not in your hands.

Yes, the javascript engine which is going to compile your code may be a Spider Monkey, a TraceMonkey, a JägerMonkey, a Carakan, a SquirrelFish, a V8, a Chakra or even the sucking WSH. So you have to make sure that your code runs smart with any browser. Understanding how each of these engines work takes quite a lot of time. When you want to develop a cross-platform highly interactive web app in a short time, the following things are good to keep in mind.

Event handling

  • To know in which element the event occurred, use and fallback to event.srcElement
    elem = || event.srcElement;

Keyboard events

  • To know which key was pressed, use event.keyCode and fall back to event.which
    key = event.keyCode || event.which;
  • Use onkeydown if you want the event handler to be called continuously while the key is pressed and held. Suitable for backspaces, arrow key navigation, etc. Otherwise use onkeyup.
  • Never rely on punctuation keys. (These keys are dependant not only on browser and operating system, but also on keyboard configuration and the official system language).
  • To detect Alt, Shift and Ctrl keys, check if event.altKey, event.shiftKey and event.ctrlKey respectively are true. The keyCodes for these are less reliable on Mac.

Note: keypress event always returns 0 in Firefox.


Callbacks and this

  • Value of this pointer is lost in callback functions. So,
    function outerFunction() {
      function print() {
      setInterval(this.print, 1000);

    won’t work. Because inside setInterval, the value of this is lost. You can overcome this by copying this to something else, say that.

    function outerFunction(that) {
      var that = this;
      function print() {
      setInterval(that.print, 1000);

    This can make your code messy. I would suggest you use Underscore.js bind and bindAll methods to bind this to functions.


  • Accessing characters in a string using normal way of indexing arrays, as in

    works fine in all browsers except IE. So, always use

  • split function using regular expressions as below doesn’t work in IE.
    var str = 'somestring';
  • Comma at the end of an array or any object as in
    var position = { x: 5, y: 10, };

    works fine in all browsers but throws error in IE.