Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
GNU is Not Unix Politics

GNU Grep and Sed Maintainer Quits: RMS and FSF Harming GNU Project 476

In a scathing rant posted to a GNU project mailing list, the maintainer of grep and sed announced that he was quitting the GNU project over technical and administrative disagreements. Chief among them: He believes RMS is detrimental to the project by slowing down technical innovation (the example used was RMS's distaste for C++, not exactly a strong point against RMS). Additionally, he noted that the FSF is not doing enough to help GNU "Projects such as gnash are bound to have constant funding problems despite being (and having been for years) in the FSF's list of high priority projects.". Finally: "Attaching the GNU label to one's program has absolutely no attractiveness anymore. People expect GNU to be as slow as an elephant, rather than as slick as a gazelle, and perhaps they are right. Projects such as LLVM achieve a great momentum by building on the slowness of GNU's decision processes, and companies such as Apple get praise even if they are only embracing these projects to avoid problems with GPLv3." The author is quick to note that he has no philosophical disagreements with GNU or the FSF.
This discussion has been archived. No new comments can be posted.

GNU Grep and Sed Maintainer Quits: RMS and FSF Harming GNU Project

Comments Filter:
  • by Anonymous Coward

    Enough said.

    Gnu/Anonymous FSF/Coward.

  • Why does C++ matter? (Score:5, Interesting)

    by PhrostyMcByte ( 589271 ) <phrosty@gmail.com> on Sunday December 23, 2012 @04:28PM (#42376825) Homepage

    the example used was RMS's distaste for C++, not exactly a strong point against RMS

    So RMS doesn't like C++ -- this doesn't stop people who can use it properly from writing their projects in it, does it?

    Does RMS actually have control over what GNU projects are implemented in? If so, I'd say that's quite a strong point against GNU -- throw the whole "right tool for the job" bit out the window because one dude doesn't like it?

    • by Anonymous Coward on Sunday December 23, 2012 @04:39PM (#42376899)

      From TFA (I know, I know, cardinal sin, but I read the article yesterday on LWN):

      However, all Stallman had to offer on the topic was "We
      still prefer C to C++, because C++ is so ugly" (sic). As a result of
      this, the GNU coding standards have not seen any update in years and
      are entirely obsolete.

      So, RMS wasn't involved in the C/C++ switch, but his refusal to acknowledge it has lead to a lack of "C++ is a real thing, we should have a coding standard" across GNU.

      I saw another comment somewhere (that I can't find now) about how, prior to LLVM, RMS *was* opposing many things (I believe, but can't be sure without the source, that the switch to C++ was one of these things), and since LLVM came out as a competitor, RMS has been compelled to be more amicable to change he doesn't personally like.

    • by Anonymous Coward on Sunday December 23, 2012 @04:49PM (#42376941)

      True, but those few people who use C++ correctly seem to have learned their lessons with C. I'm thinking of Sam Leffler, I've held up his clean programming in his HylaFAX software as examples of *how* to do C++, instead of merely holding up the numerous examples of how not to do it.

      Unfortunately for comparisons, Sam is one of the authors of BSD UNIX. Not NetBSD, OpenBSD, FreeBSD, or invent-yet-another-pointless-license-scheme-BSD. But original BSD. *Brilliant* programmer. Junior programmers should review Sam's code to unlearn the bad lessons taught by people who don't understand how object oriented work should be used.

      • Re: (Score:3, Insightful)

        True, but those few people who use C++ correctly seem to have learned their lessons with C.

        That may be, at least in part, because many of the less than ideal aspects of C++ come from its C heritage.

        I don’t understand some of the arguments made against C++ by certain “elder statesmen” of the OSS world. It seems they don’t like some of the extra functionality available in C++, seeing it as overcomplicated or too readily able to hide behaviour. In itself, that’s a reasonable concern. But then they use C, and reinvent the same wheels using crude text substitution macros

      • by marcovje ( 205102 ) on Sunday December 23, 2012 @06:07PM (#42377413)

        Leffler moved on to FreeBSD afaik, and even was FreeBSD Foundation president for a while

    • by K. S. Kyosuke ( 729550 ) on Sunday December 23, 2012 @05:18PM (#42377087)

      So RMS doesn't like C++ -- this doesn't stop people who can use it properly from writing their projects in it, does it?

      Yeah, after they enforce a company-wide ban on multiple inheritance, exceptions, and 95% of the publicly available libraries [google.com].

      • Re: (Score:3, Informative)

        by Anonymous Coward

        So RMS doesn't like C++ -- this doesn't stop people who can use it properly from writing their projects in it, does it?

        Yeah, after they enforce a company-wide ban on multiple inheritance, exceptions, and 95% of the publicly available libraries [google.com].

        The Google style only applies to code written by Google employees. Those publicly available libraries are not banned (except for Boost, and then only certain parts of it).

        • by ais523 ( 1172701 )
          Also, IIRC the ban on exceptions is because they had a lot of existing code that wasn't exception-safe and didn't want to break it, rather than because they think they're a bad idea in general.
      • Multiple inheritance is actually problematic in a lot of cases, especially for libraries.

        Of course , its like singletons or whatever. Shouldn't do it, but sometimes deadline-practicality wins and its the best tool for the job.

      • by swillden ( 191260 ) <shawn-ds@willden.org> on Sunday December 23, 2012 @08:31PM (#42378301) Journal

        So RMS doesn't like C++ -- this doesn't stop people who can use it properly from writing their projects in it, does it?

        Yeah, after they enforce a company-wide ban on multiple inheritance, exceptions, and 95% of the publicly available libraries [google.com].

        Google doesn't ban multiple inheritance, though in most cases multiple inheritance of anything but pure interfaces is discouraged, and there's rarely any need for Google engineers to use all of the BOOST libraries, given Google's extensive internal libraries.

        I do wish that exceptions were allowed, but I understand the rationale for avoiding them (it's spelled out in the style guide), and can't disagree with the decision.

        (I write C++ code for Google.)

    • He's got sway. I actually love RMS's philosophy and the staunchness with which he defends it. But sometimes yeah he's a bit old fashioned like that, and yes he has some sway, because GNU is a specific project, not just a licence.

      Personally I can't stand C++ either, but my decisions affect me alone, not a huge volenteer org I'm heading up.

    • by Sir_Sri ( 199544 ) on Sunday December 23, 2012 @06:58PM (#42377735)

      throw the whole "right tool for the job" bit out the window because one dude doesn't like it?

      Imagine a conversation goes like this. (Imagine that this is a shop that does C development right now).

      New guy: This project that needs doing. I could do it in C++, I could do it a lot faster than in C.

      Old manager guy: If we do it in C++ it means we have to keep C++ capable people on around. Even if you stick around 10 years from now you might be out of practice coding.

      New guy: Ok, but if we don't do it in C++ we're probably not going to get it done at all, because we don't have the resources to do it in C at all.

      Old manager guy: If it means we lock ourselves into a future of more skills than we have, it's not worth doing, because we can't guarantee being able to support it, and I don't want our name on abandonware.

      They'd both be right. And that would be why GNU still doesn't consider itself to have a stable release. If you demand everything be done exactly perfectly you'll never even finish one thing, and if you accept 'good enough' you can easily end up with bits of code clinging to life that you will eventually have to just rewrite.

      I just was on a project where one of the other software guys took all of the function names of a MS windows package, and completely rewrote how quite a lot of them behaved (not just implemented the same API differently, he actually completely changed what the functions do), but that was about 10 years ago. Now, to try and update that code and use the new version of the actual MS api we had a nightmare of a time, trying to figure out what he changed, and why was actually really hard and wasted a lot of money. And yet, it meant he had a working piece of software out the door 10 years ago that kept him in business for 10 years.

  • Distaste of C++ (Score:5, Insightful)

    by BenoitRen ( 998927 ) on Sunday December 23, 2012 @04:30PM (#42376847)

    I knew about Linus Torvalds's distaste of C++, but not Richard Stallman's. What is it with open-source leaders and their irrational hate of C++?

    • Re:Distaste of C++ (Score:5, Insightful)

      by russotto ( 537200 ) on Sunday December 23, 2012 @04:33PM (#42376863) Journal

      I knew about Linus Torvalds's distaste of C++, but not Richard Stallman's. What is it with open-source leaders and their irrational hate of C++?

      It's not irrational, or at least probably isn't. C++ is a horrible language, and I say this as a professional C++ programmer.

      • Re:Distaste of C++ (Score:5, Interesting)

        by Animats ( 122034 ) on Sunday December 23, 2012 @04:49PM (#42376953) Homepage

        C++ is a horrible language, and I say this as a professional C++ programmer.

        C++ stands alone as the only major programming language with hiding but without memory safety. Strostrup is in denial about this, which prevents fixing the problem.

        Templates don't help. Trying to make templates into a compile-time programming environment results in a language that makes Perl look readable. Just because templates are a Turing-complete term-rewriting system doesn't mean you want to use them that way. Papering over the safety issues with templates doesn't help; the mold always seeps through the wallpaper. Usually at system calls that demand raw pointers.

        (Somewhere in the 1980s, low-level programming took a wrong turn. We had Pascal, the Modula family, and Ada. Things seemed to be getting better. Then Modula crashed and burned along with DEC, and Ada declined due to its bulk and overly expensive compilers. We all had to go back to C. That we're still stuck there is embarrassing. It's probably the worst major engineering standard since the British buffer-and-chain coupler from 1830 still in wide use.)

      • As a C++ programmer, you don't hate C++. You only truly hate the language after trying to implement it and reading the ambiguous, informal description of it that they have the cheek to call a specification.
      • Re:Distaste of C++ (Score:5, Interesting)

        by Trepidity ( 597 ) <delirium-slashdot@@@hackish...org> on Sunday December 23, 2012 @05:04PM (#42377015)

        If anything, the dislike for C++ from people who use C++ regularly is much deeper than the more casual dislike that C programmers have. C programmers just think C++ is too complex and unnecessary, but C++ programmers find themselves so consumed by their dislike they end up doing things like writing a point-by-point rebuttal to the entire C++ FAQ [yosefk.com].

        • Re:Distaste of C++ (Score:5, Interesting)

          by TrekkieGod ( 627867 ) on Sunday December 23, 2012 @06:25PM (#42377519) Homepage Journal

          If anything, the dislike for C++ from people who use C++ regularly is much deeper than the more casual dislike that C programmers have. C programmers just think C++ is too complex and unnecessary, but C++ programmers find themselves so consumed by their dislike they end up doing things like writing a point-by-point rebuttal to the entire C++ FAQ [yosefk.com].

          I think they're just more vocal. Not everyone hates C++. My job involves writing in C, C++, and C#. I love C++. In my ideal world, I'd have C++ with all the .net libraries (and no, managed C++ isn't that. C# is far preferable to writing in managed C++, as C# is actually a pretty good language and managed C++ doesn't give you any of the cool features of C++ that C# doesn't have).

          I find people's arguments against C++ to be quite illogical. For example, one of the reasons I really like the language is because it can do true multiple inheritance. People everywhere will then immediately correct me with, "multiple inheritance is bad, mmk?" Then they'll back up that statement by talking about the diamond problem, and how I should use interfaces. I do use interfaces, but they're not a replacement for multiple inheritance because it's still forcing me to duplicate code when I wouldn't otherwise have to. Besides, the language handles the problem in a reasonable way (the order in which you define the inheritance matters), and, as a programmer, if you're inheriting from two classes that have a method with the same signature, then those methods should be virtual, and you should override the method to do exactly what you want. The diamond problem isn't this beast for which there is no reasonable solution. It's just something you need to be cognizant of when coding.

          There's also the people who complain about all the incredibly hard to debug crazy stuff people do with templates. You're really just complaining about bad coding. Templates allow you to build more reusable code than generics, and that's how you should use them. If you're going beyond that just because they're turing complete and you can do more with them, well...you might as well complain about C after looking at last year's winner of the obfuscated C contest.

      • For the people who don't program, can you define why its "horrible"?

        • by betterunixthanunix ( 980855 ) on Sunday December 23, 2012 @06:53PM (#42377703)
          If C++ were a car, the accelerator would be a pedal located under the passenger seat, a dial on the radio, and a lever in the trunk. Most users would just shift into neutral, which would be a 14 step process, and push their car around the block; they would then point to this as a major accomplish, and would note that once the car is in neutral it is powerful -- after all, you can always shift into drive if you really need to!
      • by mwvdlee ( 775178 )

        What is it about C++ that using just the C parts from it still makes it horrible?
        Every programming language has bad parts; use the parts that aren't bad.

      • Re:Distaste of C++ (Score:5, Interesting)

        by VortexCortex ( 1117377 ) <VortexCortex AT ... trograde DOT com> on Sunday December 23, 2012 @05:26PM (#42377139)

        Agreed. There are edge cases in the language where the bolted on features don't work together because the implementation issues weren't fully considered before the feature was adopted, and efficiency is a higher priority that not having exceptional cases in syntax. Since most of the language works with itself you only develop this hatred if you've got experience in other nicer languages with syntax isn't broken in places, or until you've mastered the language and been prevented from using it by its own design. The crux of the problem is two fold: C++ tries to distance itself from implementation details, while accepting implementation details as limitations for language constructs (polymorphism + multiple inheritance + template class + method & operator overloading == uninstantiated functions and indeterminate or uncompilable code) C++11 has addressed some of this, but IMO the language just isn't complete! Furthermore the strain is compounded due to C++ being forced to squeeze the substance of its syntax out of the meager scraps of symbol space left over from the voracious host language, C (without support for which the language would have never seen widespread adoption).

        Thus, the hatred graph is like a bathtub curve: It seems irrational to those intermediately knowledgeable about the language, but perfectly sane to many new comers and seasoned veterans of C++. A large amount of adoption is due to ease of code migration from C to C++, as opposed to say, Java, and is thus won on no real merit of the language itself, but by it's martyrdom at the altar of compatibility with C. Many of the C to C++ converts never "move the furniture", so to speak, and thus the missing paneling in the corner or dark stains under the rugs is never known to them.

        That said, I still use the language, it has its merits, but never all of its features at once -- That's impossible, unlike with most every other language that exists. This is where the hatred has its roots.

        Imagine a great Enchantresses who can open their spell book and can command the full fabric of her reality, then imagine a Powerful C++ Wizard who's book of spells has contradictory elements and seemingly arbitrary restrictions based only on the syntax of the spell definitions, they've each trained a mighty Sorcerer who's now well versed in both arcane books of magic, and its his turn to take on an apprentice. The sorcerer advises against C++ for the most serious of wizardry since more elegant alternatives exist. However, the young apprentice can't fathom why... The simple C++ spells she learned seem to work fine, a natural extension of the C illusionist lessons she learned; Did not re not her object oriented magic of mops and buckets allow cleaning the kitchen floors with any sort of bucket and mop? It's unthinkable that this spell shouldn't be applied to every floor -- NAY -- every surface and abolish cleansing chores forevermore... Soon the Sorcerer arrives to dispel the tangled templated abominations of multi-inherited broom-mop-bucket hybrids so overloaded they're smashing stacks of dishes with their many scrubbing appendages, and overflowing the tower with heaps of infinite buckets.

    • irrational

      That word does not mean what you apparently think it means...

      • by Anonymous Coward on Sunday December 23, 2012 @04:43PM (#42376913)

        My distaste of C++ cannot be expressed as a fraction.

      • Re: (Score:3, Insightful)

        by BenoitRen ( 998927 )

        Yes, it does:

        • 1. without the faculty of reason; deprived of reason.
        • 2. without or deprived of normal mental clarity or sound judgment.
        • 3. not in accordance with reason; utterly illogical: irrational arguments.
        • 4. not endowed with the faculty of reason: irrational animals.
    • Re:Distaste of C++ (Score:5, Insightful)

      by thsths ( 31372 ) on Sunday December 23, 2012 @04:52PM (#42376963)

      > I knew about Linus Torvalds's distaste of C++

      And for good reason, C++ in kernel space is a recipe for disaster. Some parts of it may be useful, others would be highly inappropriate.

      > What is it with open-source leaders and their irrational hate of C++?

      There is nothing irrational about it. C++ is one of the most powerful compiled languages ever conceived, but it is very ugly. It also supports just about any programming paradigm, badly, making the choice between them especially hard. Every other language out there has more focus and more style, except maybe perl.

      • Re:Distaste of C++ (Score:4, Interesting)

        by PhrostyMcByte ( 589271 ) <phrosty@gmail.com> on Sunday December 23, 2012 @05:21PM (#42377105) Homepage

        And for good reason, C++ in kernel space is a recipe for disaster.

        I hear this fairly often, but never with any compelling argument behind it. What parts of C++ wouldn't work well for kernel-mode, exactly? How are these specific parts, combined, enough to give a blanket "recipe for disaster" statement?

        The one poor argument I've heard is that some C++ features requires runtime support, and people seem to think this runtime support is some user-mode voodoo that is impossible to implement in kernel-mode. Which is complete nonsense.

        I've written drivers (albeit for Windows, not Linux), and I'm a bit of a language lawyer when it comes to C++. I can't say I've ever encountered a problem in kernel-mode where I thought C++ wouldn't be able to do the job. And not with some crappy subset of it, either. I mean full-blown, properly-used C++.

      • Re:Distaste of C++ (Score:4, Interesting)

        by darkHanzz ( 2579493 ) on Sunday December 23, 2012 @05:25PM (#42377127) Journal
        On the other hand, it's the only mainstream language I know that supports both very low-level and very high-level programming style. This can be a real plus for compute intense signal processing, were a small minority of the code really requires low-level implementations. Being able to mix that with high-level abstractions (e.g. linear algebra factorizations) can give both efficient and maintanable code.
    • Re:Distaste of C++ (Score:5, Interesting)

      by PhrostyMcByte ( 589271 ) <phrosty@gmail.com> on Sunday December 23, 2012 @05:05PM (#42377025) Homepage

      What is it with open-source leaders and their irrational hate of C++?

      I don't think it's irrational. It's just for different reasons than many individuals may have.

      It is perfectly possible for someone extremely competent in C++ to write code that someone else, with an equal level of knowledge and experience, can't make heads or tails of without some serious review time.

      And then there's an additional problem that, because C++ is such a complex language, it's possible for people with more experience to write better code that people with less experience simply can't yet understand. And by less experience, I mean someone who understands the problem and the general solution, but only has 5 years of heavy C++ use. This problem of pure language complexity and a huge ramp-up time may not be unique to C++, but it's something C does not really suffer from.

      I say this as someone who absolutely loves C++ and uses it daily. I love the complexity. I love to play around with templates to do some micro-optimization that I'd probably never put in live code. But I must say, the idea of being a maintainer -- reviewing and committing a diverse set of patches like Linus has to do -- for a C++ project sounds incredibly daunting for the reasons given above.

      Often, this leads to atrocious usage guidelines [googlecode.com] that significantly hamper the flexibility and power of the language in an attempt to make it more accessible.

    • Re: (Score:3, Informative)

      by YurB ( 2583187 )
      Linus doesn't like C++ because he's a kernel programmer. It's important to him what the CPU actually does, i.e. what machine code gets produced (more or less). RMS may not like C++ because he's from the old generation of programmers who were dealing with all the slow and big machines and for whom object oriented programming may seem just too abstract, too conceptual and far from the machine code... RMS also likes Lisp more than Python, and Lisp is also a very old language.
  • by gbjbaanb ( 229885 ) on Sunday December 23, 2012 @04:31PM (#42376853)

    However, all Stallman had to offer on the topic was "We
    still prefer C to C++, because C++ is so ugly" (sic).

    well, score one for technical argument and intellectual reasoning.

    If ugliness was a consideration, then surely GNU should be moving to a beautiful language, such as C#. If no, then WTF does subjective qualities of a language have to do with anything, there's no problem with any language as long as it is understandable (and I contend that means individual coding style rather than anything in-built - C can be so obfuscated they have competitions for it!).

    the problem with all of this is the usual geek tendency of arrogance - where one always thinks he has the mental superiority to everyone else, and this is the biggest single detriment to the OSS community of all.

    • I'm just some guy on the street, but I was pleased to read it and see that it was for pragmatic and not political reasons. At least a pragmatic problem can have a pragmatic solution instead of turning into a ideological mess.

  • The year 2000 called. They want their "obvious" back.
  • by Anonymous Coward on Sunday December 23, 2012 @04:51PM (#42376959)

    I advise people to read the actual message; this summary is exaggerated.

  • by murdocj ( 543661 ) on Sunday December 23, 2012 @04:57PM (#42376989)

    The posting is NOT a "scathing rant", it's a pretty clear, calm and well-reasoned explanation as to issues that the author sees with GNU and GNU software development. There's no flamebait, no ranting, no name-calling.

    • by statusbar ( 314703 ) <jeffk@statusbar.com> on Sunday December 23, 2012 @05:33PM (#42377177) Homepage Journal

      Absolutely.

      Also, one of the interesting points about the primary reasoning behind the creation of the CLANG compiler was not because of the GPL license.

      it was because the developers wanted to make GCC more powerful, so that it could be used as a library.

      Stallman refused to allow the features to be added even though they were not asking for the GPL licensing to be changed.

      So the developers started CLANG. In c++. as a library.

      Watch this for some very interesting history and features:

      http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Clang-Defending-C-from-Murphy-s-Million-Monkeys [msdn.com]

      • But RMS's position on not modularizing GCC isn't irrational, at least from his perspective -- his concern is that if GCC is made into a set of libraries, vendors will write proprietary front- and middle- ends to do all the (awesome) stuff Clang/LLVM do, and this would lead to a vicious cycle where all development on the GNU toolchain would be diverted from the hard-to-monetize GPL's GCC, and into the BSD or proprietary libraries people stick onto it.

        HIs refusal to make GCC into a library is his strategy fo

        • by dkf ( 304284 ) <donal.k.fellows@manchester.ac.uk> on Sunday December 23, 2012 @07:24PM (#42377911) Homepage

          HIs refusal to make GCC into a library is his strategy for making sure commits keep coming into GCC. And in OSS, he who receives the commits has the power.

          The problem with that strategy is that it keeps you as king of a shrinking castle; many potential community members decide they don't want to put up with the attitude and go elsewhere. Sure, there are faster ways to become irrelevant, such as taking everything private and selling out to Ora... err... EvilSoft, inc., but the trend is still down if you don't try to properly maintain the community.

          I've seen it said that the internet sees censorship as damage and tries to route around it. It's true for other types of over-strict control too. It doesn't matter whether the control freak has good reasons for doing it either; the internet doesn't care for the moral strength of the reasons, it just sees the outcome. RMS's opposition to the things that some wanted to do with GCC has prompted the creation of an open competitor that is sapping much of the potential strength they might've otherwise had. This long-term threat to GCC is largely of their own making.

          Oh well, I'll probably use GCC for a few years more at least; old habits die hard (and I never wanted to write a C compiler in the first place, so the internal complexity was an issue far off my radar).

  • It's Christmas and we have nerd rage on the intertubes. At least it's less boring than reading facebook updates or twitter feeds....
  • The LWN article linked to is about "Copyright assignment" (http://lwn.net/SubscriberLink/529522/854aed3fb6398b79/)

    The author seems to complain that he cannot retain copyright over his work.

    Does that mean he doesn't want to code for free anymore?

  • by mccrew ( 62494 ) on Sunday December 23, 2012 @07:31PM (#42377965)
    I guess the big news here to me was that GNU grep and sed were being maintained. :)
  • by loufoque ( 1400831 ) on Sunday December 23, 2012 @09:11PM (#42378541)

    This reminded me of the latest project of ESR: a system to replace the CIA IRC bot that sends messages to IRC channel when people commits things to repositories. http://www.catb.org/esr/irker/ [catb.org]
    He chose to implement it in Python, probably because of distaste for C++.

    After several days of trying to use it and running into severe bugs (random crashes, often locks up, doesn't deal well with unstable connections, excessive memory and CPU consumption, data races and general unreliability -- and of course it required latest python and some very svn version of some library dependency, no fun otherwise) I gave up on trying to fix it and rewrote it from scratch in C++ instead.
    In two hours I had a working lightweight and extremely robust implementation of the protocol he defined. I followed the project for a while and it seems it kept having major usability issues for weeks, to the point where many people were reporting bugs and contributing hacks to fix them.

    All because it was poorly designed and overengineered. The guy actually made the whole thing multi-threaded (with no knowledge of how to synchronize things properly) even though it wasn't needed.
    I think one of the bad aspects of that old generation of notorious hackers is that they're not that good, but their name pulls people in.

  • by D'Sphitz ( 699604 ) on Sunday December 23, 2012 @10:07PM (#42378799) Journal

    In a scathing rant posted to a GNU project mailing list

    Where is this scathing rant? All I can find is a extremely polite, well written [gmane.org] airing of grievance and resignation.

One man's constant is another man's variable. -- A.J. Perlis

Working...