This one’s gonna be my patented controversial fun mails and I expect a lot of people to contribute and express opinions, one I’m sure is gonna increase my search-engine ratings heavily. You gotta admit. My admiration for MS increases day by day and they never cease to amaze me at the amount of very subtle yet profoundly significant philosophical thinking they have done. This post is written by the FOSS-promoter side of me in the role of a FOSS-insider, as “one of them”. I hope Microsoft doesn’t kick me out of my job for this – I love working there, but I do wish many more people understood why it’s such fun to work there.
It’s based on certain stuff I’ve been saying previously, but has recently been verbalised due to my experience at Microsoft, and the CSLinux discussions and the many social problems I see plaguing the FOSS people, and yes, let’s not forget their egos – something that always gets me into trouble when I post anything.
Since I’ve seen a lot of criticism of Microsoft in the previous years, which also gives me a great deal of admiration (I also admire Hitler for that matter) for the company – one company vs a philosophy is a big deal. Even if MS collapses, we cannot overlook the fact that it is still just _one_damn_company_ while FOSS is a _whole_lot_of_things_put_together_. The fact that FOSS chooses to attack MS personally so much is something that gives them a great deal of free publicity. The fact that an entire philosophy is pissed of and waging war against a damn company is something that subconciously makes windows users admire it. I think that my own product will be expected to get 3 lawsuits against it within 4 months of its release – and I am praised all the more for it.
Let me explain this mentality. It takes a while (took me six weeks) to understand it clearly but it’s very important to understand it – you’ll get a clue to why MS does many of the things it does.
One thing I learnt when I went there is that if you’re hurting someone, then you’re doing something that _matters_. This is a VERY important concept to grasp and understand right. Something the FOSS world has to really understand at the base. Everytime they pissed of MS, regardless of what they did, it has hurt MS seriously. MS never gets pissed off unless they lose profits – which is true of anyone out there. And that’s something we learnt to do from day one! When someone spends time to criticise you, when someone spends time on defending Linux (even though it has some features missing), when someone claims that features in FOSS are only what the users need and features in MS products are not what they need, when someone subconciously portrays FOSS vs MS, etc. – all this contributes to Microsoft’s publicity directly or indirectly. Because you take time to do anything when you are being hurt – when you lose profits.
There have been many blogs and articles on why .GNU and Mono were the very stuff that almost killed off Java and justified .Net. The fact that the FOSS community would copy .Net is an instant justification that MS got it right (nobody cares about your arguments and tech stuff). Java was working. It was stable. It was a standard. And it was cool. Java was almost blocking .Net’s entry everywhere. Developers at MS, many of my best friends including myself personally, still use Java for their personal projects. Yes. It’s _that_ popular. And FOSS rebelled against Sun over it. Why because they wanted to break the very thing that makes Java so popular – standards. Come now, the FOSS community has not been exactly popular amongst developers for sticking to standards.
In fact, many developers love Linux’s stability, they love Linux’s security, but they hate the fact that they can’t write C code once and move it to different distros in binary form without a whole deal of pain. I’m one of them. Sure, you’ll give me a lot of preprocessor directives and makefiles and configure scripts to help me out; but the fact remains that I really just care about inverting a matrix. I don’t give a shit about your philosophy and I don’t give a damn about the GNU build system’s complexity. I want 100 of my users to be able to type in a matrix and get it’s inverse and to do it as fast as possible.
Microsoft capitalizes on this heavily. Java was the one non-MS thing that really worked – and it worked great. The topcoder applet is a great example. Most of my friends are red-rated topcoders. They can go anywhere and everywhere and login to topcoder.com and load the 1.4M applet and begin coding and increasing their rating. They could be at home, at college, on a vacation, etc. the bottom line is that it doesn’t really matter. It simply “works”. When you distribute a webservice in Java, it really _does_ work by simply plugging in to an app server. Yes! All FOSS-based solutions that _claim_ to work this way either need a lot of target-dependent tweaking either in macros, or configure scripts or elsewhere, or they need someone who knows their way around code.
The fact is that 90% of the world’s computer users are NOT coders. Come to terms with it. People must farm, they must grow food, run banks, run offices, run buses and cab services, run airlines and do a whole deal of stuff. Running around towm, proclaiming, “Hey, I can see the code! I can see the code!” isn’t a big deal for many. They simply don’t give a shit! _I_ don’t give a shit!
Ever hear of the story of the miser who converted all his money into gold and stored it in his backyard and it got stolen? A wise man advised him to put a big stone rock there in it’s place because for all practical purposes the gold was of absolutely no use to anyone while it lay there. That’s what code is for many. I’m not criticising all the stuff about peer reviews and all that crap. The point I’m emphasising is that don’t tell me all that stuff and stop throwing code at my face every time I face a problem with Linux. Talk to me about features, talk to me about installations, talk to me about deployments and talk to me about business value!
Sorry about the loooong narrative but I had to do it to build up my case for what I have learnt as a “Unix Solution”. It’s a very valuable lesson I learnt at MS and if only many FOSS people could learn to look beyond their egos and learn to _listen_ instead of constantly defensively criticising and proving-dumb anyone who doesn’t conform to their rule, they would completely kill off MS.
I remember my last PLUG meeting (I missed the last two due to other issues), when Devendra demonstrated usage of a Wifi card with Linux, and Amit demonstrated the XAMPP thing. I remember myself having given countless demos on configuring NIS and NFS at colleges (which sadly still use Telnet or some remote-terminal services; which is a pitiable solution at best).
And I saw one thing that I kept doing which was the first thing I was criticised for Microsoft. They said my first product demo which went to sample users was a “Unix Solution”. Took me a few weeks to understand what that meant. And it was a VERY significant thing to learn. Let’s review all the demos I talked about above:
1. Guru: “When configuring NIS, go to /etc/yp.conf….”
User: Huh? What’s /etc? Why is it yp.conf? What’s all that? I thought we were talking NIS…..
Guru: Uh yes. But …… (blah blah about sun microsystem’s yellow pages……)
User: Huh? Oh ok….. continue……
Guru: Now for NFS. Edit /etc/exports/
User: Hold on…. I want NFS. What’s exports? What’s that etc again?
Guru: Oh yes……. exports because….. (again a lot of blah)
User: Uh. Ok. Couldn’t it be easier to call them nis.conf and nfs.conf?
(But I’m sure someone will reply explaining why this can’t be done right here, and I’ll convey this message the next time I visit a BCS college, but the fact is that they just wont give a damn! They just want to configure NIS/NFS and want it to be _called_ NIS/NFS)
2. Guru: Type “ifconfig” and install a driver with so-and-so…..
User: Huh? What’s that? Why can’t I double-click on an icon and have it detect nearby networks? What’s ifconfig? What’s that got to do with my network? Why can’t they call it “network-configure”?
Guru: …….. (lots of history and philosophy)
3. Guru: Unzip the tarball of XAMPP to /var/xampp, then “simply edit so and so file”, “simply edit so-and-so file”, and it’s done.
User: What’s a tarball? What’s unzip? Why should I put it at /var/xampp? Why not /archis/xampp?
Guru: Oh you can do that, but you just need to set a few paths…..
User: Can’t it do that when I unzip? I mean for god’s sake, why the hell would I want to put something at /archis/xampp unless I want it to run from there? Why can’t the dumb system understand that?
(End-result: user goes home, fires up XP, double-clicks on an icon, gets network running, XP crashes, user reboots, in 10 seconds is back on the network, we on the mailing list call him stupid for not knowing that _obviously_ nis would be yp.conf and _obviously_ the network card is setup by ifconfig (how stupid he is not to be able to make such a simple intuitive association), XP crashes again, he reboots, in 10 seconds is back on the net, he unsubscribes from the mailing list, we go around proclaiming windows is dying and MS is dying and Linux is great, he doesn’t care, XP crashes again…..).
In short, the definition of a “Unix App” is “An app that you know how to use and I know how to use but nobody else knows how to use”.
Most moderators of this list including myself use so many commands whose names make no sense whatsoever to anyone except for ourselves who’ve used them before. For a newbie, there’s no place _find_ the command. I remember myself in FY couldn’t remember the head and tail commands, and knew their functionality. But I simply could not find them unless I already knew what they’re called. There was no command which allows me to say keywords: “last few or first few lines in file” and will search for them in the man-pages. MS is criticised on “Help on Help”, but at that point, I’d have liked help on the help system if such a command did exist; I’m sure someone will reply here in some sort of, “Oh, you should simply have “grep | something | something |” to get the relevant man pages – and the tag-line “Anyone who doesn’t know this is stupid”. Like I care what he thinks. Thousands of colleges have Linux _in_the_syllabus_ which is the holy grail of promotion and _yet_ nobody uses it. Good luck with your “everyone is stupid” tagline, cause companies are running behind these stupid people and paying them and regarding their opinions highly.
The main motivation for this mail is because Amit asked me to explain to the community “what is” CSLinux without getting technical. This mail is a first-order attempt at explaining my long chain of thought and my basic ideology behind all the technical decisions we’re taking. It is a way for people to follow the concept and crux of what it is all about. Another reason I’m posting this mail is because recently CSLinux came under heavy criticism for simply “putting together stuff that already exists”. Well, big deal. If you can’t put it together, why’re you jealous of us doing it? The reason I posted all this is because contributers to CSLinux should feel very proud of themselves. The fact that we’re being criticised means we’re making a difference and a big one at that. The fact that people hate a self-configuring system is because they lose their power of being the big-shots whom everyone turns to for help at colleges. CSLinux should ideally be empowerment. And empowerment of humans (my old claim of freedom for humans before freedom for software). A query being posted on this mailing list should be taken as an indication of personal failure. A failure to write software that explained itself. I have learnt to behave this way and I find I write much better software now. One understanding that I got at MS is that people don’t wake up and write code and read code. People want to run medicine stores, and grocery stores and farm, and make pots and make utensils. “I can see the code, I can see the code!” is not of much incentive to them.
The thought of this mail came to me when while talking about CSLinux, which is currently only a LiveCD, I came on the topic of installation. Lots of stuff came to our minds that an installer should have. When we proposed companies or colleges that putting this into Ubiquity or Anaconda would be a good project, they all pointed us to URLS with installer having _those_ features. The point is are those features in _my_ installer and _today_? Ans: It’s all there. “Code is free! Code is free!” LOL!!!!!!!! There’s 50 installers with 50 features out there, but not one installer with _all_ fifty.
Recently I posted to to a mailing list in response to a mail about Turbo C, and I was speaking of Eclipse and that Anjuta fails miserably beyond just “an editor”. Calling it an IDE is just not upto expectations. It cannot manage makefiles. And I immediately got a response saying, “I personally find managing makefiles through vi preferable……”, The point is, what the hell do I care what you personally find preferable? I want an IDE that manages my project for me. I _have_ an IDE that does it for me. And I’m gonna use it. End result, I unsubscribe from the list cause it wastes my time and bandwidth. I’d be fired from MS if I told users what I personally like. I personally like to code kernel modules. My users personally don’t like to do that. They want to run their shops and offices and desktops. That’s why they hire me to write their kernel modules for them in the first place – and pay me heavily for it. Naturally on that mailing list, it’s all informal and I like know know people’s opinions – so there it was totally appropriate. But personal opinions are not _solutions_ to other’s problems. Just expressing the fact that you don’t like the way someone demands something, isnt going to make him stop demanding it.
Think about CSLinux’s installer. It’s not working. It’s not working even remotely. Most of our audience doesn’t know how to run it, how to install it, etc. The reason I find Redhat succeeding so much even under fire from the Debian community is because they seemed to “get it” when we explained this to them. Instead of pointing us to lots of URL’s where such functionality exists, Venkatesh Hariharan or Rahul Sundaram or other people actually encouraged us contributing such features for Fedora and is ready to give out a redhat scholarship for the CSLinux project – if students will commit, of course. It was a pity to find many companies not getting this point – the very point that makes Microsoft work and that makes Redhat so successful and Java so popular.
When I walk into a college, do I have a CD today that has everything they need, under the right names, with intuitive command names, with relevant help, with relevant MSDN/Javadoc-type to-the-point documentation without “I can see the code!” comments interfering in it, with an installer that simply works, has all the features that we claim “Linux has” (which is another way of saying some FOSS project somewhere has it), and scripts to do stuff that 10,000 (a low-order estimate of students in BCS today) need to do everyday. It should be a failure for us if 10,000 students have to do the same thing manually – the purpse of software itself being to automate repeated tasks.
You’ll find that simple symlinking, and wrapper shell scripting can do wonders to the experience. Relevant command names, relevant intuitive filenames linked to originals in /etc/cryptic-name1/crypticname2.conf, relevant shell scripts to get a “default” database in postgres, etc. are things that can make it more fun and more exciting.
When someone asks you, “How to do so-and-so”, you must always develop software where you can answer “Oh, that’s simple. Just double click on that icon and follow the instructions on screen.” That is the ideal CSLinux that I envision. Where configuring NIS should be called “configuring NIS” in the GUI, on the command-line, in the installer, and everywhere else. Where if 10,000 kids are going to configure postgres, then they shouldn’t have to configure it in the first place.
Look at how we promoted the Wiki! We simply tell people to go to the Wiki and begin editing. It’s all there. The Wiki has instructions for modification, formatting everything. How many of you reading this post on a Linux box who’ve never made a man-page before can convert this mail into a man page, and distribute it to everyone and assure me that it will install and be available for reading on the desktop with a double-click? And how many of you who’ve never even heard of a Wiki can visit the cslinux Wiki and put this page up as a Wiki entry? Just try it for fun. You’ll get my point of the difference between a “Unix Solution” and an “End-user solution”.
As Shirish puts it, all comments, feedback, flames are welcome.
hi Archis, I agree with you stress on “usability issues” for Unices…!! We need better UI for configuring stuff…
However I disagree your views on telnet and other terminal stuff..I have a datacenter here and i can tell you that telnet/ssh is very very handy in configuring machines remotely…moreever, i will add that we need an cli-based integrated tool sets ( which typically use ncurses based GUI app) to fo away with ifconfig, /etc/exports and other stuff…
Comment by Ameya Agnihotri — February 7, 2008 @ 10:54 pm
I guess you didn’t catch the essence of my comment. I never said you _shouldn’t_ have a CLI. I never said telnet is bad.
All I said was, just because you know how to use telnet, doesn’t mean you should go around _forcing_ everyone to use it. If you believe in “choice” and “philosophy” and all that kinda crap, then you have to give the choice to the user. In a “newbie Linux training program”, when people introduce them to _only_ telnet without giving them any other alternative, you take away their freedom.
For me, human freedom is far more valuable than freedom of some non-sentinent entity like software.
We use vi, emacs, grep, diff, etc in Microsoft too where it makes sense to use it. But we don’t force it down people’s throats or behave like Gods because only we can use it. If someone likes Visual Studio, and if they are more productive using it, then we don’t prevent them from using it just because we personally use vi. We use Visual Studio heavily where that increases our productivity. What makes me mad is when some “Guru” comes to me and gives me holier-than-thou shit because he _can_ use vi even if he doesn’t contribute anything positive to the world by using it.
FYI, the three examples I gave were *real life* examples where I was attending these sessions. People asked the speaker, “Is there any tool that will make this job simpler?” and the speaker’s answer was, “No.”
Comment by Archis — February 10, 2008 @ 6:56 pm