Slashdot Mirror


Linus Says No to 'Specs'

auckland map writes to tell us about an interesting debate that is being featured on KernelTrap. Linus Torvalds raised a few eyebrows (and furrowed even more in confusion) by saying "A 'spec' is close to useless. I have _never_ seen a spec that was both big enough to be useful _and_ accurate. And I have seen _lots_ of total crap work that was based on specs. It's _the_ single worst way to write software, because it by definition means that the software was written to match theory, not reality."

540 comments

  1. Linus Taken to Task by jg21 · · Score: 5, Insightful
    There's a very good post later on in the kerneltrap thread:

    Linus is an engineer/tech. He dislikes theory work because it often gives nothing in practice.

    However, specs are not always theory, and they may be usefull, as well as docs. He may be smart enough (or know linux code enough) to not need any doc/spec, but it's not the case of many other people. Some specs are good, and sometimes necessary.

    He cited OSI model, well, but I can assure you I won't go in an airplane if it was done with Linus' practices... There are specs in some places that are good, and that are read and followed. Even in non-dangerous domains such as Web standards, specs are necessary, and those who don't follow these specs make crap softwares/browsers!

    Moreover, in Linux development model, which is fuzzy and distributed, not directed, defining the software may be vain. However, in a commercial environment, defining the spec is really writing a contract, which protects both the customer and the editor. Specs there defines what the software can and must do, and ensures it will do. Linus obviously lacks of experience in industrial and critical projects. He may be right for the kernel development (however I still doubt it should be so entire on that subject), but he's wrong on many other domains.

    IOW, Linus does here a generalization which is at least as wrong as are the examples he cited. As we say : "all generalization are false".

    If he finds a bad spec, either it throws it away, or he fixes it. It's the same for technical docs. But he shouldn't tell every specs are useless and bad. That's wrong.

    1. Re:Linus Taken to Task by gowen · · Score: 5, Insightful
      He dislikes theory work because it often gives nothing in practice.
      Indeed. And, in fact, for those specs that aren't theoretical, he's followed quite closely (albeit without calling them a spec). There's a lot of work gone in to making Linux POSIXly correct, and POSIX is a spec, even if Linus doesn't consider it one. Similarly for VESA framebuffers, or tty specs.

      Basically, a spec says "X should work like this."
      You follow a spec whenever it's clear that X should work like that (for whatever reasons, be they performance, clarity or interoperability). If it's not clear why the spec mandates that, it's a bad spec, but the existence of many many bad specs doesn't invalidate the concepts of specs.

      By all means pick and choose the specs you decide to follow, but don't make silly generalisations.
      --
      Athletic Scholarships to universities make as much sense as academic scholarships to sports teams.
    2. Re:Linus Taken to Task by Anonymous Coward · · Score: 1, Interesting

      "...such as Web standards, specs are necessary, and those who don't follow these specs make crap softwares/browsers!"

      I don't know a single browser that fully supports most of the webs official specs. This is the point where most people would say, "except, maybe lynx." But, even there, it doesn't render to spec because of its limitations. Yeah, it's a guideline when implimenting these features, but it is rarely "written to spec."

          Man, I use firewire and USB drives at work all the time. You'd think if they have the logo on the side, they would properly support the spec. They don't. One drive may work fine in Windows, but barf on MacOS--or Linux. It is all about how the manufacturer and OS implimented the spec.

    3. Re:Linus Taken to Task by Rakshasa+Taisab · · Score: 5, Informative

      The summary is twisting the discussion into something very flamebait worthy, and it gives a false impression of what Linus really said.

      From my impression of the discussion it isn't specs he is against, but rather following those specs without being flexible enough to take reality into account. Would you really want to fly the plane built to spec, if some of those specs turned out to not accurately reflect reality? In that case you'd change the specs, but that's not always possible.

      In this specific case, the problem was someone using the abstraction layering described in the spec, while the kernel would according to the others be better off using another design. If the software behaves equivalently, it should not matter how it is designed internally.

      --
      - These characters were randomly selected.
    4. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      Specs are most important for interoperability. A product which works on its own doesn't need a spec. It just needs to work. A product which is part of a bigger system needs to follow specifications. As can frequently be observed in the linux world, if there is no spec, everybody keeps changing interfaces and everybody else has to keep adapting. This becomes unmanageable quite quickly and causes stress: Information about necessary changes is lost (as there is no documentation other than the code itself, which doesn't differentiate between internal and external changes). Developers feel "out of the loop" or ignored.

    5. Re:Linus Taken to Task by achurch · · Score: 3, Insightful

      I can assure you I won't go in an airplane if it was done with Linus' practices...

      Don't blame the builder if he doesn't have the tools. The real problem is that the field of software development is just too young for the sort of meaningful and useful standards and practices needed for solid engineering to have been developed. Right now, we have:

      • A design process thought out by people who have spent way too long thinking about design theory (in theory, theory and practice are the same--in practice, they're not)
      • A bunch of programming languages, most of which were created by looking at earlier ones and saying "hey, I can tweak this and call it a new language!"
      • A testing methodology that says "throw everything in the book at it, and hope your book isn't missing any pages"

      That's not exactly a recipe for success. Granted, it is possible to make things work right for a single project if you throw enough effort into it (e.g. the Space Shuttle software), but the vast majority of developers don't have that kind of effort available to throw around, and we're still a good number of years (decades?) away from figuring out what everything has in common and how to make it work cleanly. We're making progress, certainly--concepts like encapsulation spring to mind--but there's still a long way to go before you can talk about "software engineering" the same way you do, say, "civil engineering".

    6. Re:Linus Taken to Task by EntropyEngine · · Score: 1

      He clearly makes a sound argument, so I'm not sure why anyone would be confused by what he said, which is largely very unambiguous.

      What I will say is, his opinions / observations don't always hold true.

      Sure any qualified specification is a conglomeration of best practices and the knowledge of how to do something the right way through hard-learned experience?

      I certainly don't go and throw an idea into any of my specifications without being sure of its validity beforehand...

    7. Re:Linus Taken to Task by dramenbejs · · Score: 5, Insightful
      You are saying it here: However, in a commercial environment, defining the spec is really writing a contract, which protects both the customer and the editor. Spec is not usable for coding, but for employing. You come inevitably to three possibilities:
      1. Your project is trivial and spec may be achievable.
      2. Your project is not trivial and spec is copied from some existing product
      3. You have written the spec after making the program.
      There is no way around this! Or you can predict ALL of reality? I doubt...
    8. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      I don't think it's fair that software development always gets the "they're young and don't have the refined processes of the real engineers" treatment. System development is a very complex task and while the methodologies available to developers are at least as encompassing and effective as in other engineering fields, software engineering problems are much more complex and numerous. But software is "field replaceable", so it doesn't get the same attention in the development process. People also demand the least amount of overhead. You wouldn't want to cross a bridge unless it's designed to support much more than the expected load. On the other hand, software often runs on hardware which is just barely enough to get the job done, and only if the software is very "efficient" (IOW, it can't do proper error checking without breaking the timing). Where software is designed for reliability and gets the environment it needs to be reliable (hardware redundancy), it doesn't fail more often than hardware. IMHO it's simply the "software is cheap" attitude which breaks it.

    9. Re:Linus Taken to Task by ajs · · Score: 5, Interesting

      POSIX, VESA and even ttys are all examples of specificatons that sought to unify existing practice. The practice came first, then the theory. If you want an example that goes the other way, you would have to look to something like IP, which was created as a specificaton along with the first implementations.

      Linus is correct, though. Specs are rarely useful breasts up-front. Standardization of existing practice is often useful, but that's another beast.

    10. Re:Linus Taken to Task by Troed · · Score: 5, Insightful

      I'm a Mechanical Engineer and a Software Engineer by education. I'm a software developer/architect by profession. I've stopped believing in the "engineering" part of software development altogether.

      It's a nice thought, but it's not possible to look at software development as a physical manufacturing process. We're much closer to art.

      (In addition, I exclusively work in the embedded/telecom part of software development - areas much closer to engineering than normal personal computing type of development. If these are my experiences, most development should be very far from engineering. Maybe we should stop looking at NASA development as some sort of best practise [Gilb, I'm looking at you!] for all types of software development)

    11. Re:Linus Taken to Task by gowen · · Score: 5, Insightful

      That's a reasonable point. In fact, the problem most people have noticed with Linus's statements is that he fails to draw that distinction. If he said "specs imposed from the top down `this is how we should do this thing'" tend to be bad, as opposed to specs which say, "people have had success doing it like this -- let's all do it that way."

      No-one, as far as I know, is denying that many many many bad specs exist, and that they should all be cheerfully ignored.

      --
      Athletic Scholarships to universities make as much sense as academic scholarships to sports teams.
    12. Re:Linus Taken to Task by HuguesT · · Score: 2, Interesting

      Code *as* specs

      In a few projects I've worked for, we delivered code *as* specs. I.e. an implementation of some library together with documentation.

      The client took the working code and the documentation, and then re-coded the entire library to their standards from scratch, using the implementation as benchmark. At least that's what they'd said they'd done... I believe they took the code lock, stock and barrel and wrote a tiny interface layer on top, but I don't want to know this.

    13. Re:Linus Taken to Task by indifferent+children · · Score: 3, Interesting
      in a commercial environment, defining the spec is really writing a contract, which protects both the customer and the editor

      But since the spec is almost certainly incomplete, and likely wrong in several spots, what you have is a contract that means that a judge is likely to rule in your favor, but a customer who hates your guts and a lot of industry buzz about how you are being sued by one of your customers. Get in bed with your customer and discover which of their needs you can meet on a continuing basis. That's a better recipe for success that being 'technically correct'.

      --
      Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
    14. Re:Linus Taken to Task by Geccie · · Score: 1

      I agree. Software development, like medicine, is an art implemented with science. Engineered software is like a government bureaucracy; it is a belief that a perfect process makes a perfect product. It ignores the fact that we are not all-knowing nor infallible.

    15. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      it's not possible to look at software development as a physical manufacturing process

      Well, duh.

      We're much closer to art.

      No, we aren't. I enjoy good clean code as much as the next guy, but software is nowhere near art and programmers aren't artists. There are tried and tested practices for many software problems. There are specced, prebuilt and verified blocks of software which can be arranged to form more complex systems. We can argue about the merit of verification systems or cognitive approaches to programming, but just because many programmers like to reinvent the wheel so they can do it their way doesn't mean you have no other options than to build software from the ground up.

    16. Re:Linus Taken to Task by ivan256 · · Score: 2, Insightful

      POSIX, like most specs, is designed to allow software to be both closed-source, and compatible. When your code is available, the sole traditional reason for specs is gone.

      Specs that are written by a group of competing organizations are worse than obsolete. They're disaterous. A lengthy revision process slowly, but completely removes all but the most necessary of the specifics from the document in order to match as closely as possible the existing technology from all parties involved. This leads to standards compliant compatibility nightmares. Look at SCSI for a perfect example of this.

      Code examples are always better than specs because they are unambiguous. Better yet if the code is commented when the reasoning is unclear. Code combined with a spec can't hurt if the code is the ultimate authority, but what's the point?

    17. Re:Linus Taken to Task by Marillion · · Score: 4, Insightful

      What I think he is really trying to fight is what the Agile Movement calls Big Design Up Front. BDUF recognizes that customers will never see how a software application will transform their business and will invariably change their minds. Dwight D. Eisenhower summed it up as "In preparing for battle I have always found that plans are useless, but planning is indispensable."

      --
      This is a boring sig
    18. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      It ignores the fact that we are not all-knowing nor infallible.

      Quite the opposite. Engineering software means that you take fallibility into account by finding ways to measure correctness and either improve correctness or mitigate the effects of incorrectness. The absence of this feedback loop is what makes most software unreliable. Engineers don't always get things right the first time either, but they don't excuse their mistakes like programmers so often do: "It's so complex that it's impossible to avoid mistakes." Instead engineers include verification in the design process, whereas programmers usually let the customers verify their product.

    19. Re:Linus Taken to Task by bradasch · · Score: 1

      It's a nice thought, but it's not possible to look at software development as a physical manufacturing process.

      Indeed, I agree with you. It's been said that software development is not a mass manufacturing process, but a new product development process. Also, to clear what I think is a bad generalization, I agree there is no perfect engineering method. So, instead of looking for a perfect process, I'm used to look at best practices, and to avoid common mistakes. That, in my experience, can evolve to a method for team development, that depends on the project and on the team.

      No development process can be perfect, simply because, as you state, art is involved.

    20. Re:Linus Taken to Task by JCMay · · Score: 1

      There are specced, prebuilt and verified blocks of software which can be arranged to form more complex systems.


      How's that different from a painter using store-bought paints, brushes and canvas instead of creating his own? Do sculptors make their own chisels? Do musicians build their own instruments?
    21. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      It isn't specs he's against huh?

      A "spec" is close to useless. I have _never_ seen a spec that was both big enough to be useful _and_ accurate.

      You sure about that? Sounds to me like you just wanted to defend Linus and so concocted a defense without taking into account what he actually said.

    22. Re:Linus Taken to Task by kpharmer · · Score: 0

      > However, in a commercial environment, defining the spec is really writing a
      > contract, which protects both the customer and the editor. Specs there defines
      > what the software can and must do, and ensures it will do.

      And by focusing on the letter of the agreement rather than the spirit it also increases the chance of failing to meet the needs of the user. The fact that you've got a contract may protect you in court, but it won't win you any return business or references from yet-another-pissed-off-customer.

      Just one of many reasons why agile methodologies are replacing paper-heavy & model-driven methodologies on so many commercial development projects.

    23. Re:Linus Taken to Task by YU+Nicks+NE+Way · · Score: 1
      Specs are rarely useful breasts up-front.
      Something about "Guys don't make passes at girls who wear glasses" comes to mind when I read this sentence.
    24. Re:Linus Taken to Task by gowen · · Score: 2, Insightful
      When your code is available, the sole traditional reason for specs is gone.
      This is true, as long as your code is completely bugfree. i.e. it's never true.
      --
      Athletic Scholarships to universities make as much sense as academic scholarships to sports teams.
    25. Re:Linus Taken to Task by YU+Nicks+NE+Way · · Score: 2, Interesting
      it's not possible to look at software development as a physical manufacturing process. We're much closer to art.
      I like to tell my younger colleagues that "We aren't engineers, and we aren't artists. We are craftsmen and -women. We make useful devices through the skills we have. We make pots and pans."
    26. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      In order to tell you why software development is not art, I need to know how you define art. I wouldn't consider combining prebuilt blocks for the sake of creating a new functional entity art, but perhaps you have a definition of art which allows this.

    27. Re:Linus Taken to Task by DrLex · · Score: 1
      As we say : "all generalization are false".
      Hmm, isn't that a generalization on its own? Then it must also be false... But then not all generalizations are false, therefore this generalization might be true... but then... *brain explodes*

      After reassembling my brain, I can only agree with you. I'm working on a PhD and even I make 'specs' for myself before starting to code. I know from the past that, if I just start to code away without thinking first and writing down what I'm going to do, I either end up with ugly unflexible software, or I just get completely stuck.

    28. Re:Linus Taken to Task by qwijibo · · Score: 1

      I've never gotten any meaningful specs for any of the software projects I've worked on. The closest I've gotten is "requirements" from a vendor that is really a proposal of how they intend to use their products to fit our needs, ignoring the needs that are not met by their products.

      The problem with specs is that you have one person or group trying to convey what they think is relevant to another person or group who will do the implementation. I believe it's better to help the other person or group understand the needs and give their input as well. I respond to requests for programs with questions about the actual needs of the requester. For example, one program that was needed had 5 distinct functions it needed to perform. I told the person (non-technical) that if I skipped #4, I could do it before lunch. Otherwise, it would take a couple of weeks and require endless meetings to discuss point #4. It turned out the functionality was more of a wish than a requirement.

      I think it's a matter of different types of personalities. I agree that there are people who really need the specs. If you don't understand the subject matter, the specs represent the compressed version of the subject matter that is deemed relevant.

      Those who do understand the subject matter at least as well as those writing the specs are better off taking the position Linus has. One should ignore the specs when they're asking for the wrong thing. Only someone who knows the subject matter and the technology is going to be able to determine that there is a better way of achieving the desired goal, regardless of what's been specified.

      Both types of personalities have their places. I can write software that fits the needs of the customer, whether or not they knew what they needed when they came to me. On the other hand, I wouldn't want a pilot to share my disinclination for documentation or checklists.

      You're right about specs being a contract. I think this is also why so many software projects fail. Once the specs have been signed off, there's a disincentive to provide a more useful product if it would conflict with the specs. Though, for open source projects I think the legal implications would be irrelevant. A developer could simply add a comment like "Ignored sections 3-7. Do not share author's affinity for smoking crack." In business, completing the contract is the goal. For open source, having a working program is the goal. These don't always coincide.

    29. Re:Linus Taken to Task by Rakshasa+Taisab · · Score: 2, Informative

      And that's important. Specs are a basis for _talking_about_ things. But they are _not_ a basis for implementing software.

      I think this quote gives a better insight into what he thinks than your quote. Also you need to understand the context in which he considers the spec "useless".

      --
      - These characters were randomly selected.
    30. Re:Linus Taken to Task by msobkow · · Score: 1

      Linus is talking about hardware specs, then comparing them to mixed model specs like OSI. He further generalizes that specs are useful for talking about implementations, but not for actually doing them.

      The problem is that he's ignoring how important that discussion framework is when trying to bring new people into a project, or trying to maintain components after the lead engineer(s) are gone. A good spec provides an invaluable model of how to think about the implementation, not a written-in-stone detail of how to write the implementation.

      But he is right about bad specs. I once worked with some old Sperry mil-spec hardware (AN-UYK502.) The compilers produced code based on the hardware spec, but the real hardware implementation had reversed the registers for the results of division. Every piece of code produced by the compiler had to be manually tweaked to correct the mistake, but because the compiler met the spec, the vendor wasn't allowed to fix the problem. To the military mindset, it was the hardware that didn't meet spec and needed to be fixed.

      --
      I do not fail; I succeed at finding out what does not work.
    31. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      I think we've actually come a long way, but just tended to ignore the lessons - or are forced, by competition, to ignore them in favour of fast and cheap (and patch it up later). Sales have usually promised stuff way before you even get to the point of requirements capture.

      Equally, the problem / advantage of extreme/agile/lean programming methodologies is that it allows software development to respond rapidly to loosely defined and changing requirements. This is great from a competitive point of view, but it doesn't lead to good programming.

    32. Re:Linus Taken to Task by klaun · · Score: 2, Interesting
      POSIX, like most specs, is designed to allow software to be both closed-source, and compatible. When your code is available, the sole traditional reason for specs is gone.
      I'm under the impression that this type of argument is usually refered to as the "straw man." You redefine the issue ("there is only one reason for having specs and it is this") to something that you can refute, refute it, and then declare victory.

      But saying open code is the solution for specs doesn't seem quite complete. So are we saying whoever gets there first wins? I.e. if you are the first to define a protocol in code, everyone else must follow what you've said? Which is okay as long as you are Open Source, but abject evil if you are closed source. (see Microsoft discussions, et al.)

      Or perhaps we might call upon the invisible hand of the market to decide. Saying everyone code their solution to the problem... and whatever is used becomes the de facto standard. But doesn't this imply that a lot of people will spend a lot of time creating code that will never be used? Is this really the most efficient process?

      And given the reality of the world where open source and closed source software must interact, what then?

      I would posit another reason for a spec that you implicitly dismiss. That the goal of development can be agreed upon before any development starts so that more than one solution can be available at the same time. In fact for closed-source code I think this is as strong a reason as the one you posit. Companies don't all want to come up with their own idea of LDAPv4, code it, launch it, find they did not "win" in the market, and then redevelop to the version of LDAPv4 that did win.

    33. Re:Linus Taken to Task by Bedouin+X · · Score: 1

      Not even so much that as the fact that there are few code examples that can accomodate for every conceivable situation.

      In many cases you'd have to turn out a ton of examples that would be much less efficient - in terms of the time / ease to produce and the time / ease to consume - than writing an abstraction of what the method in question requires and does.

      --
      Dissolve... Resolve... Evolve...
    34. Re:Linus Taken to Task by sverdlichenko · · Score: 1

      Open source is not a reason to throw out software specs. Do you really want to spend a few weeks patching program for your system?

    35. Re:Linus Taken to Task by Lodragandraoidh · · Score: 4, Informative

      I think there is some confusion between the idea of 'software specifications' and 'standard interface specifications'. One may referenct the other, but they are not the same.

      Software specifications define functional, design and sometimes implimentation details, and in my experience never survive implimentation simply because the developer can never anticipate every obstacle that reality throws at it. Thus the software specification quickly is changed, after the fact, to represent what was implimented. It lags behind reality and serves only to document what *was* done, rather than driving the development.

      Standard interface specifications (APIs, and other standards such as POSIX) serve as agreements between many different players about how a particular interface should work to provide interoperability between all users of the standard. If you want to foster interoperability then you follow the standards that are widely accepted. Without standard compliance Linux would not be where it is today.

      I read the article and it occurs to me that the confusion between them was at the heart this very issue. This confusion is sadly furthered by the use of the term 'specification' to represent both things - which are clearly different. Implimentation of emergent technology is different than established protocol agreements. Perhaps we should couch our language to make those differences clear when we speak about it.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    36. Re:Linus Taken to Task by duffbeer703 · · Score: 4, Interesting

      What Linus is saying is that specs are dumb, and the right way to do things is to let him make or delegate all decisions, and retain the right to arbitrarily change those decisions later.

      A spec implies a commitment, and Linus is used to everything being in the air when it comes to Linux. A spec would also make it easier to fork Linux, and thereby make Linus less important.

      Linus is no idiot... this is clearly a political stance.

      --
      Conformity is the jailer of freedom and enemy of growth. -JFK
    37. Re:Linus Taken to Task by gowen · · Score: 1
      I think there is some confusion between the idea of 'software specifications' and 'standard interface specifications'. One may referenct the other, but they are not the same.
      That's certainly the case, but there's a deeper problem in that, in reality, a given specification might not neatly fall into one category or another. Since there is overlap between the two classes of spec, it's still hard (and unwise) to make generalisations about the worth of either type. I think it's safe to say Linus meant the former, but I still think he's wrong.
      --
      Athletic Scholarships to universities make as much sense as academic scholarships to sports teams.
    38. Re:Linus Taken to Task by ivan256 · · Score: 1

      So you imply that specs contain no errors? Likewise, this is never true.

    39. Re:Linus Taken to Task by bigtrike · · Score: 1

      Linus is an engineer/tech. He dislikes theory work because it often gives nothing in practice.

      I hate to nitpick, but being an engineer I'm offended to be characterized like that.

      Every engineer I know (those with an engineering degree) likes specs. When specs do not exist, an engineer does the math necessary to create them. If raw data is not available to create those specs, the engineer will do studies or have studies done to create them. While it is definitely possible to apply these principles to software and networking, none of the self-titled engineers I've met (typically network admins and perl coders) do any of this.

    40. Re:Linus Taken to Task by ivan256 · · Score: 1

      Who needs to consum it when you can just copy the code? Really, if you want something low impact, write a requirements document and leave the technical details up to the implementor. If your spec is specific enough to allow the consumer to anticipate every concievable situation, it will be just as complex as the code. If your spec isn't specific enough to allow the consumer to anticipate every concievable situation, then you will have incompatabilities, or tons of pre-required knowledge.

    41. Re:Linus Taken to Task by BinLadenMyHero · · Score: 0, Flamebait

      He cited OSI model, well, but I can assure you I won't go in an airplane if it was done with Linus' practices...

      Given a plane controled by Windows, and other controlled by Linux, which one will you go into?

      There are specs in some places that are good, and that are read and followed.

      Like he said, specs that match reality are good. They are worse than useless otherwise, they're misleading.

      Even in non-dangerous domains such as Web standards, specs are necessary, and those who don't follow these specs make crap softwares/browsers!

      Make a browser looking at the specs only, don't testing it with real world web pages. It will not work in the general case, because the web out there is not like the specs say they should be. You can argument that The browser will work for pages written strictly by the spec, but this will be an irrelevant browser, cause it doesn't handle the wild world wide web out there.

    42. Re:Linus Taken to Task by JabberWokky · · Score: 1
      I would say that he's much more of a pure scientist -- he has repeatedly said that a single benchmark is worth dozens of theoretical whitepapers (I'm likely messing up the quote; the point is, benchmarks are his thing). He seems to trust experimenting with different methods, and then using banchmarks as close to real-world tests as possible to provide evidence supporting one of the methods. Major parts of the kernel (most famously the memory mangement system) have been written that way. It's very close to the "forking and competition is good" theory with a small panel (or just Linus himself) deciding who wins the competition rather than the general public (who are more prone to pick the fork with better marketing or an easier installer).

      --
      Evan

      --
      "$30 for the One True Ring. $10 each additional ring!" -- JRR "Bob" Tolkien
    43. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      A testing methodology that says "throw everything in the book at it, and hope your book isn't missing any pages"

      And a spec is exactly the tool required to prevent this. If you don't know what software is supposed to do, you can't test it any other way than just throwing everything you can at it.

    44. Re:Linus Taken to Task by EvilTwinSkippy · · Score: 1
      I love standards. There are so many to choose from!

      -Linus Torvalds

      --
      "Learning is not compulsory... neither is survival."
      --Dr.W.Edwards Deming
    45. Re:Linus Taken to Task by yerfatma · · Score: 1

      While I completely agree with the spirit of your message, the reality is there needs to be some agreed-upon contract. What would you subsitute, since code won't help (as evidence of agreement) in a court case.

    46. Re:Linus Taken to Task by ivan256 · · Score: 1

      I'm under the impression that this type of argument is usually refered to as the "straw man." You redefine the issue ("there is only one reason for having specs and it is this") to something that you can refute, refute it, and then declare victory.

      I'd have to be wrong about the purpose of specs for this to be the case.

      So are we saying whoever gets there first wins? I.e. if you are the first to define a protocol in code, everyone else must follow what you've said?

      Hell, no. Why wouldn't the code go through the draft/revision process like a spec? Or like open source software tends to go through already?

      Admitedly, my point is moot when it comes to closed/commercial applications.

      Or perhaps we might call upon the invisible hand of the market to decide. Saying everyone code their solution to the problem... and whatever is used becomes the de facto standard. But doesn't this imply that a lot of people will spend a lot of time creating code that will never be used? Is this really the most efficient process?

      What were you saying about straw-man arguments?

      That the goal of development can be agreed upon before any development starts so that more than one solution can be available at the same time.

      Defining requirements is not the job of a spec. A spec sets out the technical details required for use or interoperability. A requirements document has a much smaller scope. Generally the requirements end up being merely the introduction to a spec, if not a completely seperate document.

      In fact for closed-source code I think this is as strong a reason as the one you posit.

      No matter how dysfunctional the process generally becomes, I would not argue that specs are useless in a closed source environment. I didn't think that was what we were talking about though.

    47. Re:Linus Taken to Task by EvilTwinSkippy · · Score: 1
      I blame the matrix principle. We live in a physical world with certain rules. Thinks like gravity, turbulance, pressure, etc. A computer world has not rules but what the programmer hath wrought. It is an entire construct built of rules. Engineers know that, barring that we have stumbled on some new phenominon, what we see in a system has been characterized somewhere else. Air under pressure will evacuate to areas of lower pressure in accordance with certain laws. Hot things will cool down to the ambient temperature according to another equation. A mass accellerated will travel only so far before it falls to the ground.

      In a computer world, none of that is true. And you can't just toss it off a building and see how it reacts.

      --
      "Learning is not compulsory... neither is survival."
      --Dr.W.Edwards Deming
    48. Re:Linus Taken to Task by Troed · · Score: 1

      Ah, see, that's the point. In other forms of engineering it's indeed possible to get that type of feedback, and use it in productive ways. When trying to apply the same techniques to software we find (oh horror!) that no two projects are alike - not even sufficiently alike to use the measurements we took in a way that actually works to our benefit in the new project.

      This is not a view I'm holding because I haven't tried it. On the contrary, I see too many things that makes software development different from, say, a manufacturing line for auto parts that I don't believe in the engineering approach at all.

      One example: Find something remotely similar to the number of execution paths in software in any other engineering discipline. Now tell me how verification systems for those other engineering disciplines are supposed to pick up what happens at all those execution paths.

      Building blocks? Black box testing which means we can trust all the small parts? Sure - now show me software development using that method, in the wild, in a successful company. I claim that you need to make changes in those "black box components" for almost every new project, and that is the reason the "engineering" verification process fails.

    49. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      I suppose its semantics but if a Spec (short for specification?) is based on a need, which in turn derives requirements, then you have a valuable document upon which to
      design and implement your code.

      Been working like that in mainstream industry for decades, should work well with open source linux as well.

      no reason an open source project can not follow basic software development processes.

      but maybe im confusing specs with something else or I just define it differently.

      but isn't a specification based on a need or requirement? "we need to have these two processes communicate" ok, so lets define a spec on how they will communicate and form our requirements from that. How is that theory?

      not trying to be a smartass or anything, maybe I didnt have enough coffee this morning but my understanding of this is either in left field or my terminology is horked.

    50. Re:Linus Taken to Task by Perl-Pusher · · Score: 3, Insightful

      I've been following your thread here. I define art as creative construction. Music is a person taking the basic tools, measure, pitch, harmony, scales & noise and combining them in new and interesting ways. The art of medicine combines , patient history, symptoms, medicines, surgery etc. to heal a patient. You have to design an aircraft which is an art combining asthetics, aerodynamics, math and physics. Then you produce a prototype to workout any issues that don't quite work, by testing, testing and more testing. It then becomes the spec which the copies are manufactured against. Design is by definition an art. It is the same with software, you have a functionality that you want to achieve. You then creatively combine the tools available to to you to give you that functionality. You then compile the prototype and continuously debug, test and modify until you have the right balance of form and function. You then copy the program a billion times and distribute it. You then get bug reports, feature requests etc. The developer takes this new information and uses it to develop a more perfect product. With out art, you end up with interfaces that users hate, limited features and zero innovation. While you may get your users to provide the innovation in the feedback, which you then implement. More likely, someone else will create their own creative solution making your engineered solution unused and obsolete.

    51. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      Specs are rarely useful breasts up-front.

      True. I prefer real breasts. My wife's engorged pregnant breasts are rather nice too.

    52. Re:Linus Taken to Task by fitten · · Score: 1

      A product which works on its own doesn't need a spec. It just needs to work.

      How do you know *how* it is supposed to work without at least an informal spec? And after you've made it, how do you know what you build *does* work?

      You may not type up a formal Specification for the product, but you surely have gone through an informal spec in your head (requirements) to even start the thing. You know you want to write a program that does X. That's the beginning of your spec. Then, you understand that there are several parameters to doing X so you have to account for that. In the end, you judge whether your program successfully does task X against what you set out to do. Whether that is written or all in your head, those are specs.

      The hard part is that when you have more than one person writing a product, you both/all have to agree on what the product has to do. You can confirm this orally or in a written document - both are specs. If you think you are writing a program to do X one way but the others think you are doing X in different ways, or even worse, they think you are doing Y, then you've got a problem. Ever hear of the expression "You've got to all be on the same page" or "You've all got to be reading from the same page"? Those "pages" are Specs.

      I think what is being said by Linus is that he doesn't like specs that are rigidly defined at the start and aren't flexible over time as you work through the problem. Some of those are typically called "Standards", which most would agree are "good things" - just look at the stuff recently in the headlines about "open document standards".

      Standards and specs, as other posters have said, are contracts between the parties involved to define something that expected to be done and a set of criteria to measure against when the product is finished. Linus has the luxury of not having to agree to specs and delivering whatever he wants. Few of us are so lucky :)

    53. Re:Linus Taken to Task by civilizedINTENSITY · · Score: 1

      A computer world has not rules but what the programmer hath wrought.

      Information theory is our Newtonian Mechanics.

    54. Re:Linus Taken to Task by The+Real+Audi · · Score: 1
      "...are rarely useful breasts up-front"
      I'm not even gonna go there! :P
    55. Re:Linus Taken to Task by EvilTwinSkippy · · Score: 1
      And how long was the time span between Newton's Principia and the dawn of what we call to day "Engineering?"

      Moving from theory to practice can take centuries.

      --
      "Learning is not compulsory... neither is survival."
      --Dr.W.Edwards Deming
    56. Re:Linus Taken to Task by duffbeer703 · · Score: 1

      I disagree.

      Civil Engineering isn't some black magic -- you know how various materials respond to various stresses, and build (or over-build) whatever you are making so that it will survive the rigors of use and whatever the environment throws at it. Well funded/safety critical projects are built to high standards and less important projects are often cob-jobs.

      Software Engineering is similar... your companies intranet page isn't safety-critical, so its designed with much looser (or non-existant) standards. Applications like databases are engineered to a higher degree of excellence to protect data. Applications that support avionics or medical are even more carefully engineers and more reliable.

      --
      Conformity is the jailer of freedom and enemy of growth. -JFK
    57. Re:Linus Taken to Task by akac · · Score: 1

      I wouldn't get into a plane controlled by either Linux or Windows. Neither are reliable enough.

    58. Re:Linus Taken to Task by kpharmer · · Score: 1

      > While I completely agree with the spirit of your message, the reality is there
      > needs to be some agreed-upon contract. What would you subsitute, since code
      > won't help (as evidence of agreement) in a court case.

      Personally, I avoid fixed-price contracts - unless the functionality is extremely straight-forward, well-understood and simple.

      Time & Materials contracts allow me to deliver a series of prototypes that refine my and my client's requirements far better than a contract. Plus, I don't have to constantly worry about meeting the letter of a contract that may be known to be obsolete, and don't have to push back on changes - just due to the overhead of changing the contract.

      Of course, it's not really this easy - since so many customers insist on fixed price. I'm not talking from experience here, but I wonder if there are lost opportunities to break large projects into much smaller pieces - with separate requirements/contracts. This wouldn't eliminate the spec, but would break it into smaller/more managable pieces.

      Some of the problems with specs is that management doesn't understand that these massive waterfall projects that spew specs just don't work: they think requirements can be gathered up front, and so they negotiate and agree to waterfall projects that use this approach. Sigh, then after years of projects that have failed I guess they must have a variety of excuses?
          - project a: development team wasn't skilled enough
          - project b: customer couldn't make up their mind on what they wanted
          - project c: development team wasn't CMM level2
          - project d: customer kept changing their requirements
          - project e: development team wasn't CMM level3
          - project f: development team wasn't using .net/j2ee
          - project g: customer kept changing their requirements
          - project h: development team wasn't using struts/etc
          - project g: customer kept changing their requirements
          - project h: development team wasn't using web services

      at the end of the day these managers don't have any referencable customers. They might have avoided court, but may go out of business any way.

    59. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      What you call art is usually called a "craft". When everything is art, nothing is. Creativity is not art per se (that's why there is a different word for it).

    60. Re:Linus Taken to Task by hackstraw · · Score: 1

      It's a nice thought, but it's not possible to look at software development as a physical manufacturing process. We're much closer to art.

      I used to think that programmers were "artists", until I was speaking to a boss of mine (who programs), and he said that programming was more similar to a craft than an art.

      After hearing that, I believe him 100%. I see programming as a highly skilled labor position very similar to woodworking. There are an abundance of tools available to the craftsman and the skill is using the appropriate tools to put everything together until the final desired project is completed.

    61. Re:Linus Taken to Task by Coryoth · · Score: 1

      Ah, see, that's the point. In other forms of engineering it's indeed possible to get that type of feedback, and use it in productive ways. When trying to apply the same techniques to software we find (oh horror!) that no two projects are alike - not even sufficiently alike to use the measurements we took in a way that actually works to our benefit in the new project.

      Yes, because every bridge is identical to the last - the problem constraints are the same because the required span, surrounding topography, anticipated weather etc. are all identical wherever you go... and all civil engineering projects are bridges.

      In the same way that there are classes of bridges, and buildings, and canal systems and aircraft that are similar, there are classes of software projects that are similar. Is software engineering identical to physical engineering disciplines? No, of course not, and any analogy or comparison is going to become strained because of the differences. I would suggest that there are more parallels than you make out however.

      And there are ways to measure correctness for software projects, it's called formal specification. There are reasonable odds that you are doing some with whatever code you are writing now: static types are a form of formal specification, and they do provide some measures on correctness (whether function calls are correct with respect to the specification (type signature) of the function). You can also use contracts to provide a more detailed specification for functions and procedures. Going a little further you can fully specify your contracts and invariants allowing automated tools to generate proof obligations for all your code paths, and do verification of the code against the contracts and invariants. You can use those to prove theorems about properties of the code, or even go as far as full correctness proofs. You can do as much, or as little as the project calls for, depending on how badly you need to be sure of correctness: from type checking to full correctness proofs there is a range of options available.

      Jedidiah.

    62. Re:Linus Taken to Task by poot_rootbeer · · Score: 1

      Specs are rarely useful breasts up-front.

      I've been handling specs for five years at my current job, and I can't recall a single instance where they were Useful Breasts.

      (and I would HOPE the breasts would be up-front...)

    63. Re:Linus Taken to Task by uncqual · · Score: 3, Funny
      Specs are rarely useful breasts up-front.

      A perfect example of why specs are useful -- without specifications, the Intelligent Designer's developers would end up developing too many models of women with non-standard breast placement. This would then require way too many bra models which would result in way too much confusion about how to remove them quickly -- it could have lead to the end of the human race before it really got a good start.

      --
      Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading /.
    64. Re:Linus Taken to Task by scotty777 · · Score: 1

      Linus is no idiot... this is clearly a political stance.
      "If you want to get along, you have to go along."- Sam Rayburn, Speaker of the House, quoted by Lyndon Johnson, US President.
      I am dubious of most politician's motives, and of what they produce. The "proof is in the puding" in the case of really good men and women in politics. Linus has held together what amount to a herd of cats: we programmers. It's obvious that we've produced good outcomes. Not optimal or ideal, but useful, even very useful. His role has been crucial, and I thank him, and wish I had his management skills to compliment my technical skills.

    65. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      "Specs are rarely useful breasts up-front."

      Then, breasts are more useful.. where?

    66. Re:Linus Taken to Task by lgw · · Score: 1

      Specs that are written by a group of competing organizations are worse than obsolete. They're disaterous. A lengthy revision process slowly, but completely removes all but the most necessary of the specifics from the document in order to match as closely as possible the existing technology from all parties involved. This leads to standards compliant compatibility nightmares. Look at SCSI for a perfect example of this.

      The problem comes because vendors simply won't follow the spec if that might hurt revenue, so the spec isn't very helpful for the 5% of the spec that's new in the current rev.

      In general though many-party specs like the SCSI spec are there to document the past more than guide current development. This may sound silly until you realize how much it helps in preventing people from re-inventing the wheel. Sure, there aren't enough specifics to be helpful in whatever area of innovation is driving revenue right now, but all the old boring settled stuff stays settled, which reduces the driver-writing nightmare by an prder of magnitude. Hardly useless.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    67. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      My point was that most software today isn't engineered. But when you apply the available methods, you do in fact get the same feedback loop which defines physical engineering. It's just not the preferred way of writing software right now for a variety of reasons, the most important of which is that it's still cheaper to fix bugs later than it is to make sure there aren't any beforehand. This can be observed in physical engineering too. Devices which aren't mission critical are often faulty in their first incarnation because they are not designed with engineering principles: Tolerances aren't defined or checked, not all ways and circumstances of using the device are tested or calculated and compiled in a limitations document, and as with most software today the final verification is done by the consumer.

    68. Re:Linus Taken to Task by aled · · Score: 1

      > You'd think if they have the logo on the side, they would properly support the spec. They don't.

      Imagine how well those USB device would work if there wasn't a spec.

      --

      "I think this line is mostly filler"
    69. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      Define a craft because I can think of many professions that are simply highly skilled labor. The first that come to mind are Surgeons. The number two profession I think of would be Accountants. Number three, Lawyers. Number four, Pirates.

    70. Re:Linus Taken to Task by n00b_101 · · Score: 1

      I find that a set on the ol lady's back would be nice some times

    71. Re:Linus Taken to Task by lgw · · Score: 1

      Thus the software specification quickly is changed, after the fact, to represent what was implimented. It lags behind reality and serves only to document what *was* done, rather than driving the development.

      In my experience, this is the *only* kind of software spec that's valuable. A spec done beforehand can be useful as a quick rough draft for a large project, but that's about it - it will never be close to correct. A spec done afterwards is just the right way to document the code, as it's the best place to note (a) important relationships between widely seperated peices of code and (b) places where the obvious approach failed horribly for some non-obvious reason. Basically, marking the landmines for the maintainers.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    72. Re:Linus Taken to Task by ivan256 · · Score: 1

      The problem comes because vendors simply won't follow the spec if that might hurt revenue

      Hurt revenue? Please. Since we're using SCSI as an example... The problem is that people won't follow the spec because it doesn't fit the model set by their crufty OS code written decades before the spec, so they do their own thing that is almost compliant, but generates all sorts of caveats that other vendors will be forced to blindly interoperate with. That's why most storage arrays have different modes for what OS the host is running... It has to know which pseudo-SCSI to speak depending on if you're running Windows, HP/UX, Solaris, AIX, or whatever. Remember, SCSI is only an example here. This becomes true in almost any multi-platform or multi-vendor environment. Devices that don't differentiate will only work in the most basic of operations.

      Sure, there aren't enough specifics to be helpful in whatever area of innovation is driving revenue right now, but all the old boring settled stuff stays settled, which reduces the driver-writing nightmare by an prder of magnitude.

      You've never coded for SCSI, have you?

      The spec represents some ideal magical world where everything plays nice, and makes sense... Or at least is really vaguely defined. Reality is that every vendor's device does things like error recovery, status, timing, addressing, and availability in a unique way that isn't documented anywhere. The SCSI spec doesn't represent the past, it represents idealism and old flame wars combined with enough of real life to make you almost think you understand it. It increases the driver-writing nightmare (especially the target mode side) by an order of magnitude since all the things that the big vendors took liberties with and implemented differently from each other remain undefined.

      You would have an easier time learning the SCSI protocol with an analyzer and a few hundered devices (that all speak SCSI differently) than you would by reading the spec. In fact, unless you're doing the most basic of block device operations, I'd say it is impossible to write a fully working SCSI implementation (target or initiator) from the spec alone.

      Hardly useless.

      Who said useless? The problem is that we can't live without it because we don't have something better around that would make it useless.

    73. Re:Linus Taken to Task by Creepy · · Score: 1

      It's not that the OSI model is bad, but OSI was designed by committee and like many things designed by committee, features with questionable practical usage got into the spec on the insistence of one or more committee members. The problem is, when you try to be everything to everyone, you get a bloated, slow, difficult to implement piece of software, and that's essentially what happened to OSI.

          Try to design a car that way - it needs to be big enough that a person, or in some cases, more than one person, needs to fit both 3' midgets and 9' giants and still give them a perfect view of the road, needs to have great styling that appeals to everyone, etc. It may not be impossible, but to design a car for the average person and customize for the exception is much more practical.

          Also of note is that OSI people were quick to point out faults in TCP/IP as a reason to switch to their model, but before OSI could even be implemented, TCP/IP added some of the important missing capabilities and declared others as unnecessary or impossible. For instance, I recall there was a part of one layer where language needed to be translated to a neutral format - I think the Transport layer - and the TCP/IP said that was unnecessary and should be handled by the Application. The OSI people insisted that it needed to be in their layer, then struggled for two years (or more) to implement it. The last thing I heard was that the developer that tried to implement it gave up, and I don't think anyone ever successfully implemented that part of that layer (last I heard, it was decided that the TCP/IP people were correct and it should be part of the Application).

          A spec can be good, especially when working with a group and trying to coordinate diverse groups (e.g., developers, publications people, and QA), but in some cases they're useless (like if you're the only developer and know exactly what you want), and in some other cases they're unnecessary. For instance, a programmer writes a self-documented interface to handle GUI actions. Other programmers then use the self-documented interface to write platform specific code that handles the functionality described in the self-documented interface, essentially making the interface documentation the spec (I see that a LOT, but I also mostly write cross platform code).

    74. Re:Linus Taken to Task by starfishsystems · · Score: 1
      I've stopped believing in the "engineering" part of software development altogether.

      It seems that engineering gets brought to bear when economic forces justify the effort. Such justification depends on both need and ability. That's where engineered solutions historically emerge first.

      I guess that software is at the stage where the equivalent of knocking a tree over the creek or letting grapes rot is still generally perceived as sufficient to meet the need for a bridge or an alcoholic beverage. For example, I just met with some new clients last week who want help building a video surveillance product. These are professional engineers, by the way. As I went through my usual dialogue with them to gain a sense of the necessary functional elements and the interfaces between them, I could feel their impatience growing. They just wanted, you know, secure code. The little thing you put into the hardware. Clearly, a need was being expressed here for software, just not for engineered software.

      Software isn't like hardware anyway. It has no material properties which conveniently help to constrain the configuration space. In creative terms, that's a blessing. In engineering terms, it's a curse. All bridges essentially solve the same problem using the same selection of materials. It would be pretty hard to design a bridge using implicit requirements and arbitrary materials, yet that's the equivalent problem we encounter in software design all the time. Likewise, I think that our ability to bring an engineering approach to software design will emerge where the problem space and solution space are both highly constrained.

      --
      Parity: What to do when the weekend comes.
    75. Re:Linus Taken to Task by honkycat · · Score: 1

      There's another important reason for documentation separate from the code (i.e., a spec). Non-trivial code will have many effects, some of which are intended (i.e., would be part of the spec) and some of which are just implementation-specific details that are of no particular significance. Taking an approach of "well we have the code so we can always be compatible" also makes it very hard to change that code later -- is that side effect of the algorithm part of the spec in a subtle way? When you've got compatible code in multiple projects, it's no longer practical to look over all the implementations and make sure you'll work with all of them.

      You could argue that this could be handled with careful commenting of the code. However, that is effectively a spec in itself and is subject to many of the same difficulties, such as the risk of not being updated and contradicting the actual code.

    76. Re:Linus Taken to Task by bahamat · · Score: 2, Interesting
      There's a lot of work gone in to making Linux POSIXly correct


      But Linus also has a history of only following the spec so far as it suits him. I believe the word he used for POSIX's threading model was "stupid".
    77. Re:Linus Taken to Task by oliverthered · · Score: 2, Interesting

      And then after 20 years of development they realize that it is just engineering with a little artistic design.

      Why do I say that, well for one an art is something original and creative and that covers about 10% of the design of software, from then on it should be engineering.

      I've seen code from coders who don't have the correct engineering skills (that's 80%+ of developers), it's often poorly written, poorly documented, has no tests in place, and runs as slow as a dog. This is highly typical of a software development department with no dueprocess in place and where management see the softwere development process as voodoo.

      To be a bit more on topic, most of the companies I've worked at that looked at Linux dropped it because the development process is voodoo, it has no usability because the specs are always changing. Maybe if Linus had allowed a more 'stable' development cycle then there would be much more commercial take up of Linux which can only be a good thing. Some people with a hardline Linux/GPL pseudo commie stance think all software and should be free and there will be no compromises, I think that with the current user base the deeper the penetration of Linux and GPL software can only lead to a greater proportion of free software in the world and in that case specs are good.

      Now, all I have to do is find out what in the kernel has trashed my HDD twice in as many months and I'll be a happy man.

      --
      thank God the internet isn't a human right.
    78. Re:Linus Taken to Task by chris_mahan · · Score: 1

      People don't expect Joe and Jack, recent graduates of some liberal arts school with some degrees in philosophy to build a 1 mile suspended 6 lane bridge for $45,000.

      No. The people expect to hire Hecklin & York Architects and General Sea Land Construction Co and pay them $3,400,000,000.

      And wait 5 years.

      Car and aircraft manufacturers spend billions over several years to develop a new model.

      Do we do this in the software industry? No. Programmers and designers are nickeled-and-dimed with impossible deadlines and requirements that would make the Hecklin & York laugh you out of their office.

      Half-assed specs and customer requirements might be fine for the doomed-anyway fly-by-night pet project from some VP who's got too much time on his hands, but they are not fine for mission-critical software. Last time I checked, the Linux kernel is mission-critical.

      So, if the spec is going to be wrong, the spec is useless, because if the code is wrong, you can tell, but if the spec is wrong, you can't. And if you build the code on a wrong spec, and the spec is signed off by executive VPs, then you poor little programmer are going to scratch your head and write nasty and kludgy workarounds and edge cases that will guarantee that the software will be more bug-ridden than a mattress left out in the swamp for a year. And there's nothing that you poor little programmer is going to be able to do about the spec, even thought you know it's _wrong_wrong_wrong_ because, well, you're just a body in a cube. So you will grow bitter and angry inside, and you will let loose your last ounce of creativity not on your company-provided IDE but in the comment box on /.

      Oh wait...

      --

      "Piter, too, is dead."

    79. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      Maybe we should stop looking at NASA development as some sort of best practise [Gilb, I'm looking at you!] for all types of software development

      Trust this anonymous coward when he says that NASA software for their business systems can be just as ad hoc as software built for business.

    80. Re:Linus Taken to Task by Lodragandraoidh · · Score: 1

      In my experience, as well.

      Nevertheless we continue to call this 'specification', which implies prior cognizance, when software 'documentation' or something else more descriptive would probably be a better term for what takes place during and after the fact.

      The deep seated idea (and driver of software development processes) behind this comes out of early computer limitations. Everything was batch processed in the early days, and you submitted your application to the 'keepers of the beast' who would manage the care and feeding of the mainframe computer. Turn around times were enormous, so the idea of iterative development was not even considered as a possibility. This was the backdrop and driving force behind flowcharting, mathematical rigor in software, and the 'waterfall' lifecycle model that we live with to this day.

      Today, with cpu cycles and hardware nearly free, developers can economically perform exploratory development - particularly useful in the case of cutting edge real-time applications - such as operating systems and embedded projects. Sadly, many developers are under the false apprehension that specs must be set in concrete before coding begins.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    81. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      I am looking at the definition of "craft" (as per m-w.com):
      1.- skill in planning, making or executing (see dexterity)
      2.- an occupation or trade requiring manual dexterity or artistic skill
      3.- skill in deceiving to gain an end
      4.- the member's of a trade or trade association
      5.- plural usually craft a: a boat specially of small size b: aircraft, spacecraft

      So, if priogramming is a "craft":
      definition 1 definitely applies (programming as a skill labor).
      definition 2 could apply as well (programming as an artistic skill)
      definitions 3,4 and 5 do not apply..

    82. Re:Linus Taken to Task by tyme · · Score: 1
      dramenbejs wrote
      You come inevitably to three possibilities:

      1. Your project is trivial and spec may be achievable.
      2. Your project is not trivial and spec is copied from some existing product
      3. You have written the spec after making the program.

      There is no way around this!

      You seem to have missed a few "inevitable" possabilities:
      1. Your project is non-trivial and you have written a trivial and incorrect spec from scratch: even if you meet this spec, the resulting software is, by definition, flawed.
      2. Your project is non-trivial and you have written a non-trivial spec from scratch, but the spec is flawed in a subtle way: the resulting may or may not be flawed, but determining if or how the software is flawed will be nearly impossible.
      3. Your project is non-trivial and you have written a non-trivial but (against all odds) correct spec: the resulting software may or may not meet the spect, but, again, determining whether the software conforms to spec will be nearly impossible.

      The fundamental problem with software engineering is that it is inherently complex: possibly more complex than any other human undertaking. Other engineering disciplines have taken, at minimum, centuries to arrive at the current level of predictability and reliability, and those disciplines deal with much simpler systems than are dealt with in software engineering.

      Software engineering has had about half a century to mature, so we can't expect that it will be anything like its older siblings. Maybe, in another several hundred years we will be able to produce systems of similar reliability to mechanical or electrical systesm in software on a repeatable basis, but to expect such a thing today is simply unrealistic.

      --
      just a ghost in the machine.
    83. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      Exactly my point. What job out there does not require any skill in planning, making or executing?

    84. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      If you really think about it... anything that humankind does can be called a "craft".
      And because "art" may be a part of the definition of "craft", then anything that humankind does may be called an "art".

    85. Re:Linus Taken to Task by lgw · · Score: 1

      It seems like your complaint is that the spec just isn't specific enough. This is true. It's merely as specific as it can be. You could write a very specific spec (and I mean that literally, *you* could attend a T10 meeting and write one, you only need membership to vote, not to contribute), but what good would it do? A spec is only useful to the extent that vendors choose to comply.

      I've found the SCSI spec to be quite useful. Sure, you can't code to it alone, nor can you code to all products with generic logic, but no spec could achieve that. A spec is just a piece of paper, it doesn't compell a vendor to comply. It *is* useful, however, in that as loose as it is there's no excuse for not at least complying to it! I've had great success in the past getting vendors to remedy their evil ways when I had proof that there was no possible interpretation of the standard that allowed for what they were doing.

      Of course, if you don't have revenue leverage on a vendor, they won't even listen to you, but again there's only so much a spec can accomplish.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    86. Re:Linus Taken to Task by Rich0 · · Score: 1

      Agreed. Engineering can clearly be applied to software - it has parts that interact, and these parts can be characterised and systematically evaluated for suitability for a purpose. However, when you're talking about an OS or a RDBMS or something like that, the number of "parts" enters the 7-8 figures (or even more!). So, engineering on one of these projects is something along the lines of the Apollo program. Sure, you can apply engineering on this scale and get to the moon, but expect to spend a few percent of the US GDP in the process. And Apollo wasn't exactly perfect either (how many people have been killed by an ERP implementation?)...

      The fact is that most projects don't need this kind of reliability. As a result we live with scaled-down engineering processes, and obviously this is not adequte to completely remove all bugs.

      Quality, speed, cost - pick any two...

    87. Re:Linus Taken to Task by alienw · · Score: 1

      Probably just as well, if not better. If there isn't a spec, you might actually have to _test_ a variety of devices with a variety of operating systems. If there is a spec, you make a chip "to spec" and tweak it until it works with WinXP. I bet that's the design process most of those USB devices go through.

    88. Re:Linus Taken to Task by GlassHeart · · Score: 4, Insightful
      POSIX, like most specs, is designed to allow software to be both closed-source, and compatible. When your code is available, the sole traditional reason for specs is gone.

      You are wrong. You cannot reverse-engineer a spec from an implementation, because you cannot separate the implementation choices from spec requirements. For example, if I show you an implementation of an algorithm, and you realize that it can run within 300 ms, do you know if there's an actual need for it to finish within 300 ms? Or, how would you know if an alternative implementation (that uses less RAM, for instance) that needs 500 ms to run is actually acceptable?

      Similarly, there are almost always things in a spec that a particular implementation does not need (but another implementation would). To piece back together the actual spec would require reading multiple implementations and figuring out the union of all they implement. Worse, the implementations may actually contradict each other. The C language leaves certain constructs formally undefined (for example, "i = i++;" is undefined behavior), so how would you figure out what that's supposed to do by reading compiler source code?

      Thirdly, while source code may be readable by people who want to provide an implementation, it is not readable by people who merely want to use it. When was the last time you learned to program in a language by reading the source code of its compiler? What if the compiler was self-hosting (that is, written in the language it compiles)?

      Code examples are always better than specs because they are unambiguous.

      So the complete source code to Mozilla is a better source of information on HTML than the W3C HTML specification?

    89. Re:Linus Taken to Task by ivan256 · · Score: 1

      You are wrong. You cannot reverse-engineer a spec from an implementation, because you cannot separate the implementation choices from spec requirements

      Requirements are not specs. Specs are not requirements.

      Similarly, there are almost always things in a spec that a particular implementation does not need (but another implementation would). To piece back together the actual spec would require reading multiple implementations and figuring out the union of all they implement. Worse, the implementations may actually contradict each other.

      Rethink this imagining that reference code were written not to be used, but to be read. Reviewed and assembled by committee as a spec, and not for a particular application. Think of it more as a spec that isn't allowed to be ambiguous in any harmful manner.

      The reason this isn't done is because it leaves little room to build compliant proprietary intellectual property, not because it's harder to read than a PDF file full of abreviations, assumptions, and bad grammar.

      So the complete source code to Mozilla is a better source of information on HTML than the W3C HTML specification?

      Well, let's pretend you said Gecko, and not Mozilla, and that Gecko was both written clearly in a peer-reviewed environment, and 100% compliant. That way we'll be comparing apples to apples.

      The answer would then become "It depends". If your goal was to implement an unambiguous parser than yes. If your goal was to learn how to write HTML documents, I'd say no, but only because both would be equally terrible sources of knowledge for that purpose.

    90. Re:Linus Taken to Task by karearea · · Score: 1

      Specs are rarely useful breasts up-front

      I've always thought that breasts were best up-front, the ones that end up down low just don't do it for me!

      My specs aren't much use as breasts, although in moments of deep thought I have caught myself sucking on them (the specs that is)

    91. Re:Linus Taken to Task by yason · · Score: 1
      He cited OSI model, well, but I can assure you I won't go in an airplane if it was done with Linus' practices..

      I'm not sure whether you can do that on planes built without his practices either..

    92. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      Granted, it is possible to make things work right for a single project if you throw enough effort into it (e.g. the Space Shuttle software).

      FWIW, a quick Google search would show you that that is not how the Shuttle's software (or, for that matter, any flight control software) has been implemented. It's done using the very same engineering techniques that you say we're a long way from. Presumably, the grandparent does have planes he does feel safe getting on...

      The downside is cost. It's bloody expensive to design and implement the software in exacting fashion, which is how the approximating methods you describe come to be used; to cut costs in projects where it's not life-or-limb (or a million bucks) on software failure.

      TFOAE

    93. Re:Linus Taken to Task by DerekLyons · · Score: 1
      What I think he is really trying to fight is what the Agile Movement calls Big Design Up Front. BDUF recognizes that customers will never see how a software application will transform their business and will invariably change their minds. Dwight D. Eisenhower summed it up as "In preparing for battle I have always found that plans are useless, but planning is indispensable."
      It's a nice quote - but the discussions on the linked page seem to indicate to me that the writers thereof Simply Don't Get It.

      Military planning (in its highest form) doesn't have as goal actually producing any plans, recipies, checklists, or anything else that an untrained mind would recognize as a method of getting things done. What it does produce is a clearly articulated goal(or set of goals), a system for determining the relative prioritie(s) of the lesser included activities, and systematic methodology for determining the values of tradeoffs between various methodologies and priorities. Once this is done you can then create the detailed plan from the top down, but the actual execution can be handled from the bottom up.

    94. Re:Linus Taken to Task by duffbeer703 · · Score: 1

      I've worked on stupid projects like you talk about, but I've also worked on truly critical software that had to be working correctly. There's a big difference between important projects and half-ass corporate applications.

      Aircraft engineers are stuck with the same stupid restrictions and petty bullishit that you are -- but they must get the product right or the company is subject to outrageous liability. OTOH, Your company's reimplementation of a billing system or CRM implementation just isn't all that important in the big picture.

      --
      Conformity is the jailer of freedom and enemy of growth. -JFK
    95. Re:Linus Taken to Task by duffbeer703 · · Score: 1

      That wasn't a dig. Linux is Linus's creation and he has every right to do whatever he wants with it.

      Actually, its refreshing to see a talented programmer who gets it.

      --
      Conformity is the jailer of freedom and enemy of growth. -JFK
    96. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      And it just so happens that Pirates are related to all definitions
      1) Pirates are skilled in looting and plundering.
      2) Piracy is an occupation requiring significant sword wielding skills.
      3) Pirates often deceive to gain and end. They are Pirates!
      4) Pirates often go on strike to protest the bad working environments (Scurvy sucks).
      5) Pirates practice on a craft known as a Pirate Ship.

    97. Re:Linus Taken to Task by shmlco · · Score: 1
      "If your goal was to implement an unambiguous parser than yes."

      Huh? There are dozens of ways to implement parsers and grammars given a defined language. The Gecko engine is but one approach to solving HTML parsing and rendering, and not necessarily the best or most efficient approach. Further, there are implementation-dependent choices (font sizes, margins, etc.) which are not part of the HTML spec.

      A reference implementation may be useful, but it is not a spec, and can't take the place of one.

      --
      Any sect, cult, or religion will legislate its creed into law if it acquires the political power to do so.
    98. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      A simple example: Sorting. The specification would include the structure of the input and output data, the desired order and time and memory constraints. All of this is quite easily described and, this is important, depends on parts of the application which the person writing the sorting code possibly doesn't know. Writing the specification is very different from choosing and implementing the algorithm and requires both a different skillset and a different perspective on the application as a whole.

      Of course this example is a simplification, but it shows that code itself isn't the best specification. To know what the constraints for the subroutine are, the programmer would have to read and understand lots of code. Chances are he still wouldn't understand what the requirements are.

    99. Re:Linus Taken to Task by chris_mahan · · Score: 1

      I work on auth systems to approve or deny medical procedures and tests. You tell me.

      --

      "Piter, too, is dead."

    100. Re:Linus Taken to Task by Marillion · · Score: 1
      As Eisenhower said, planning is always important.

      There is a condition in psychology called "Displacement of Goals." Management, of course, requires structures and methods to manage a project. That's a given for me. The "BUT" for me, and it's a big one for me because I once worked somewhere that greviously failed to recognize it, management can't allow its staff to substitute the goal of clinging to "The Plan" to displace the goal of solving the customer's problem.

      I've seen applications transform how its users see their jobs. I'm not talking about changes staffing levels, but how the system shoulders so much work that their brains can now focus on aspects that they were otherwise too busy to notice - the proverbial trees in the forest. They now understand their job in a new way and the goal shifts.

      Sure, some programers have user communities that we would all kill for: The Shuttle Program. You've got areospace engineers making a spec for software engineers. It's a match made in heaven. Most of us aren't so lucky. Most users have tacit requirement that never get written down will never be understood by the developer. I realised one afternoon that a vendor, a business analyst and a business customer spent three hours working out requirement using the word "Gate" (like at an airport) and that weren't talking about the same thing.

      Planning is important. But, the plan that comes out of it, must be sacrificed one line item at a time as the customer realises that will get what they asked for and then realises that the asked for the wrong stuff. A project must allow for the organic nature of people. The project also has to plan the cheese moving politic of change.

      --
      This is a boring sig
    101. Re:Linus Taken to Task by nurb432 · · Score: 1

      Thats fine and dandy, until the first time you are sued for not delivering what they requested, on that paper.

      Then you will appreciate having the specs, up front and in writing.

      --
      ---- Booth was a patriot ----
    102. Re:Linus Taken to Task by synthespian · · Score: 1

      Don't blame the builder if he doesn't have the tools. The real problem is that the field of software development is just too young for the sort of meaningful and useful standards and practices needed for solid engineering to have been developed.

      Bull. Eiffel has been available for quite some time. Ocaml was used to formally verify the fly-by-wire system in an Airbus plane. A story on Usenet goes that once someone wrote software in Haskell for boss, boss says "great you wrote a spec." Employee says "no, that's code, it's Haskell." You already have stuff available, success stories, benchmarks (look at Ocaml vs gcc, Bigloo Scheme with gcc, compare SML with Java, etc). However, it's unfortunate that the open source community is such a closed-minded one, sticking to old ways (actually, Perl people got to liking Haskell, because of Perl 6).

      The problem is education. Formal methods is hard. At college, most of the time it's an optional class, and late in the curriculum, after people are already coding like Linux hackers for 2 years (and remember, regression tests only catch 80% of the bugs tops, or so said the professor). And Algol-derived languages sure don't help.

      --
      Main difference between the BSD license and the GPL license: one is from California and the other is from Massachusetts
    103. Re:Linus Taken to Task by holy_robot · · Score: 1

      I would go so far as to say that specs are never useful breasts.

      --
      Just cause you feel it doesn't mean it's there.
    104. Re:Linus Taken to Task by aled · · Score: 1

      IMHO most problems with USB are with the drivers. The spec I assume has more to do with the hardware aspects (electric, size, etc). Do your devices burn or don't fit in the port? that may be because they are to spec.
      The quality of most drivers is very poor but that is a problem of the software development process.

      --

      "I think this line is mostly filler"
    105. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      " However, in a commercial environment, defining the spec is really writing a contract, which protects both the customer and the editor. Specs there defines what the software can and must do, and ensures it will do. Linus obviously lacks of experience in industrial and critical projects." - by jg21 (677801) * on Monday October 03, @06:06AM

      I agree 110%... you MUST be a fellow IS/IT/MIS database type coder!

      * :)

      (Just a guess, but you took the words RIGHT out of my mouth, & said it better than I would have in fact)

      APK

    106. Re:Linus Taken to Task by alienw · · Score: 1

      I've had lots of random problems. The drivers are shitty. The devices are shitty. The spec sucks. I have a computer which absolutely refuses to work with my iPod, at least at USB2 speeds. I have another computer which refuses to work with the iPod at USB1 speeds, but works OK at USB2. I've had constant, random USB flakiness. My guess is that Apple and the mobo manufacturers cut some corners with things like trace impedances and connectors. Definitely not an example of good interoperability, and USB has a _very_ big specification.

    107. Re:Linus Taken to Task by Floody · · Score: 1

      (In addition, I exclusively work in the embedded/telecom part of software development - areas much closer to engineering than normal personal computing type of development. If these are my experiences, most development should be very far from engineering. Maybe we should stop looking at NASA development as some sort of best practise [Gilb, I'm looking at you!] for all types of software development)

      The standard formalized approach to software development originated from NASA, or rather from the MIT Instrumentation Lab who operated with NASA oversight when designing the Apollo Guidance Computer. As others in this thread have eloquently noted, those were different times with significantly restrictive limitations placed upon developers in terms of execution times and storage capacities by the immature nature of the technology. Still, today (with the exception of ad-hoc distributed development models, such as those employed by most OSS), we follow this model, one that is closely tied to traditional engineering, albeit without the benefits of a true rigid engineering approach. As others have noted, the abstract nature of software does not lend itself well to explicit functional testing, failure-mode analysis and robust specification adherence.

      I suspect that this model is still so widely accepted and used for one simple reason: Nobody has yet figured out a suitable replacement.

      One problem, and one I do not have the answer to, is that software development languages, while having significantly advanced from the 60s, still provide little in the way of inherent regression testing facilities. While a certain subset of developers will always neglect the importance of regression testing, the lack of immediate obvious availability of such tools does little to pave the way towards more properly engineered development. In other words, if developers don't have the tools or the tools are not readily apparent, there is less chance that they will make the effort.
    108. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      but there's still a long way to go before you can talk about "software engineering" the same way you do, say, "civil engineering".

      Yeah, here's the reason:

      A design process thought out by people who have spent way too long thinking about design theory (in theory, theory and practice are the same--in practice, they're not)

      If people followed the theory, they'd have far fewer problems. It takes a lot more work, but once the basics are built, you can actually *reuse* the basics, instead of pretending to reuse code by looking at it, tweaking it, hacking it up to fit into a new project, and finally rewriting most of it to make it work right again. Defining the basics should be the primary focus, and I find it kind of hard to believe that it's really taken so long. I think most people are just too ignorant of the theory to practice it. Functional languages that eliminate every single problem discussed in this article have been available for a long time, but very few people use them. Rigorous formal specification languages have been available for a long time, too, but people always want to abstract it away to some higher, imprecise level. Once people realize that "formal specification"="functional implementation"="formal proofs" we'll all be better off. Those concepts are equivalent in computing theory. They can be in practice as well.

    109. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      He did say such things, but Linux eventually came around and supported POSIX Threading, because being compatible with other implementations was the Right Thing To Do.

    110. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      Yet this was done without him reading the POSIX or VESA specs. That's his whole point.

    111. Re:Linus Taken to Task by Phil06 · · Score: 1

      There was no spec for the first airplane

      --
      "...and yet, I blame society" Duke - Repo Man
    112. Re:Linus Taken to Task by pepsee · · Score: 1

      Huh? Was that a Freudian slip, or some new phrase I'm unaware of?

    113. Re:Linus Taken to Task by cthulhu11 · · Score: 1

      This explains why Linuxes can't provide a usable dump utility.

    114. Re:Linus Taken to Task by SilverPDA · · Score: 1

      Having been a Director of Product Management I will agree that many specs are poor because they talk about how and not what is required. A good marketing spec however is a big help because it documents required features and defines the target user community. It also establishes limits and assumptions. In the case of an embedded product hardware cost goals are also set. Engineering specs will get into how to implement but also help soldify the marketing specification that will be used as the basis of launching the product. In a well run project, engineering will be given an opportunity to influence the final feature set. For my products, engineering also had input into the original product management specification. This has always worked well for me and produced successful products that came out on schedule and met cost goals.

      --
      Thank a veteran -- George
    115. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      i = i++;

      i++ is the post increment.
      ++i is the pre increment.

      Therefore the compiler would first perform 'i=i' and then increment 'i' by 1.

      You should read more specs.

      Sorry world about being off-topic.

    116. Re:Linus Taken to Task by sonamchauhan · · Score: 1

      Dude - you're a bad loser.

    117. Re:Linus Taken to Task by ivan256 · · Score: 1

      Huh? There are dozens of ways to implement parsers and grammars given a defined language. The Gecko engine is but one approach to solving HTML parsing and rendering, and not necessarily the best or most efficient approach.

      So because you used code as an example, suddenly all implementations need to use the same method? Why? The code can tell you what tags are allowed where in a way that is difficult to match with plain old text. That's the important part. The rest of that crap is you pulling irrelevant stuff like "best" and "efficient" into it.

      We've ventured into the obscene with this example anyway, because rendering got pulled into it, and there's nothing in the HTML specs about rendering in any specific way.

      Plus we've gotten so far away from my original point that I don't even know why I'm arguing this anymore. Original point: Specs (the ones for public consumption anyway) are for communicating technical details in a way that is sufficiently vague as not compromise the implementers' and authors' intellectual property; The more specific you can be the better; Nothing is more specific than a clearly written implementation.

    118. Re:Linus Taken to Task by ivan256 · · Score: 1

      I'm comfortable in my correctness, even if I can't convince all of you.

      Enough people... Hell, enough companies agree with me that "reference implementations" for tons of technologies exist. That is, code that you can use to learn exactly how something works, even if you wouldn't necessecarily want to run it as written.

      Being right in real life is way better than being right on Slashdot.

    119. Re:Linus Taken to Task by shmlco · · Score: 1
      And an implementation has implementation-specific choices made by the developer that have little or nothing to do with the spec. A developer's algorithm may parse x="1"y=2"2" correctly, even though the HTML spec says arguments must be separated by whitespace, and that unknown and non-parseable arguments and tags should be ignored.

      A class may have exposed a specific document tree to the outside world. Is that part of the required spec? (DOM) Are the element names required or specific to this implementation?

      Sorry, but a spec is meta-data over and above a specific implementation. A reference implementation gives people something to check against, but can be misleading.

      --
      Any sect, cult, or religion will legislate its creed into law if it acquires the political power to do so.
    120. Re:Linus Taken to Task by GlassHeart · · Score: 1
      Therefore the compiler would first perform 'i=i' and then increment 'i' by 1.

      You are entirely wrong, because you do not understand the concept of sequence points. In a nutshell, in C an object can only be modified once between two sequence points, and "i = i++;" is undefined because it is modifed twice. Do not respond to this post without learning what a sequence point is. Googling for "C sequence points" will get you several sources right on the first page.

      You should read more specs.

      I have read the C Standard. You, beyond any doubt, have not.

    121. Re:Linus Taken to Task by fbg111 · · Score: 1

      Specs are rarely useful breasts up-front.

      What a beastly Freudian slip!

      --
      Flying is easy, just throw yourself at the ground and miss. -Douglas Adams
    122. Re:Linus Taken to Task by ajs · · Score: 1

      ahem... "beasts" not "breats" is what I meant... I had chicken on the brain that day....

    123. Re:Linus Taken to Task by sonamchauhan · · Score: 1

      > I'm comfortable in my correctness, even if I can't convince all of you.

      Nothing wrong in not being able to convince people.

      > Enough people... Hell, enough companies agree with me that "reference
      > implementations" for tons of technologies exist.

      Correct, but tangential to your point. Most reference implementations serve as an adjunct to a spec.

      > Being right in real life is way better than being right on Slashdot.

      Your disdain notwithstanding :-)... ...Slashdot exchanges are also part of real life.

    124. Re:Linus Taken to Task by ACPosterChild · · Score: 1

      Nothing is more specific than a clearly written implementation

      That might count for design documentation, but in relation to a specification it's completely wrong.

      Here's a simple example:
      Spec -> The line must be held high for at least 20ms in order for the signal to be recognized.
      Implementation -> usleep(3000);

      From the implementation, how do you know the specification? You don't. The implementation works and is correct, but does not tell the whole story.

      You would need to have a reference implementation that specifically exercises every last part of a system (e.g., passing every possible data type to every function), including boundary conditions, and that has notes as to the expected outcome (i.e., whether the usage is expected to work or not and how it may fail).

      Congratulations, you've just written your spec.!

    125. Re:Linus Taken to Task by ACPosterChild · · Score: 1

      I like to think of them in terms of Design Document, that captures the overeaching intended design, and Specification Document that is post-effort documentation.

    126. Re:Linus Taken to Task by Anonymous Coward · · Score: 0

      I'd agree, except there's no difference between your "software specifications" and "standard interface specifications" other than at least one attempt at implementation attempt. Certainly it's not possible to anticipate every aspect before you begin the implementation -- that doesn't mean that your software spec is useless though. After you've adjusted it to match the actual finished implementation, it is then one of your "standard interface specifications."

      This is common practice in other forms of engineering; haven't you ever seen a design blueprint vs. an as-built blueprint? The fact that the later differs from the former does not diminish the usefulness of the original design specification, it's simply an acknowledgement that reality doesn't always work like we hope.

    127. Re:Linus Taken to Task by civilizedINTENSITY · · Score: 1

      Newton didn't have the internet and the FOSS communities, though ;-) Seriously, though, I think it is safe to suggest that the time gap between theory and implementation is shrinking.

  2. Detailed specs... by jemnery · · Score: 3, Interesting

    Detailed specs are useless. A broad spec that defines the general features, who the damn users are and what they need to achieve is far from useless. Let the intelligent software developers figure out the details, but don't let them lose sight of the general direction they should be taking.

    1. Re:Detailed specs... by lisaparratt · · Score: 1

      Let the intelligent software developers figure out the details.

      You're obviously dealing with a different breed of software developers than I'm used to.

    2. Re:Detailed specs... by stunt_penguin · · Score: 1

      I agree- a detailed spec. at the start of a project will almost immediately be made redundant by a small problem or change that is required for technical, legal or usability reasons. It is much better to create a general spec, then gradually refine any specifiactions as the project takes shape so that management stay informed and worker bees like me know what direction they're working in.

      A plan is a list of things that will never happen.

      --
      When the posters fear their moderators, there is tyranny; when the moderators fears the posters, there is liberty.
    3. Re:Detailed specs... by Anonymous Coward · · Score: 0

      All well and good for server applications, but what about something with a user interface? You want to leave that up to a developer? Not to mention having him just figure it out as he goes?

    4. Re:Detailed specs... by aralin · · Score: 1

      Quite the opposite. General specs like this are completely useless. Specification is at its best when it describes some fixed and strict process or protocol to be exactly followed. Like the HTML spec. Or the POSIX spec. Specification that sort of list all the features some program is supposed to have is more than useless for its high affinity to change. Then you have the problem with de-normalizing your source of truth with code and spec getting out of sync and you being left in chaos.

      --
      If programs would be read like poetry, most programmers would be Vogons.
    5. Re:Detailed specs... by bani · · Score: 1

      ELF is a very detailed spec which has worked pretty well and stood the test of time. I definitely wouldn't say it's useless.

      OpenGL is also a pretty detailed spec which has stood up pretty well. It's also far from useless.

      For every example of a "failed" spec, I can give a glowing example of a wildly successful one.

    6. Re:Detailed specs... by Anonymous Coward · · Score: 0

      Fixed space fonts make a poor user interface

    7. Re:Detailed specs... by indifferent+children · · Score: 1
      Like the HTML spec.

      Ooooh, bad example. HTML is one of the examples that proves Linus' point. If you are a web developer who programs to the HTML spec, and ignores the idiosyncracies of the browsers that exist in the real world, you will probably have a short, unhappy career. It's really cool that we have an HTML spec, and hopefully most (>50%) of the world's browsers will follow that spec. Until then, you must develop your websites to the reality of the browsers, spec be damned.

      --
      Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
    8. Re:Detailed specs... by GuyWithLag · · Score: 1

      Both of the specs you mention are not first generation specs.

    9. Re:Detailed specs... by Spudds · · Score: 1

      /clap
      /cheer
      /drinks <beer>

    10. Re:Detailed specs... by arkanes · · Score: 3, Interesting
      POSIX is exactly the same boat. I agree totally with Linus here - there has never been a spec that wasn't flawed, incomplete, or otherwise broken.

      In the business world, it generally goes something like this: Customer provides a spec (normally a word document written up by the one person who actually knows how they do business there, and then distorted beyond recognition by 2 months of committee meetings). You read the spec, mutter to yourself about what the hell they're thinking, and begin to write code to match the spec. When you deliver the first iteration, your customer suddenly identifies a need which they didn't spec and which totally breaks your design.

      This is so common that an entire design methodology was built around it happening, and lowering the amount of up front information presented because its always wrong and incomplete.

    11. Re:Detailed specs... by rufty_tufty · · Score: 1

      Got to say I'm with you on that one, you're the first person I've seen to express this so I'm glad I'm not alone.

      The only way I've ever found to work (assume this is a new project)
      1) create inital spec
      2) get it reviewed by peers/people who'll be implementing rest of system/customer
      3) design to spec
      4) update spec as approprite (if a minor change that deals with fine level of implementation then only inform people of change, if major then re-review)
      5) If anyone asks you a question that is in the spec then direct them to the part of the spec they've missed. If it isn't in the spec then update so you won't be asked again.

      The ammount of time this has saved me over the years with people not having to ask me questions, or me being able to answer them quickly is far greater than the ammount of time it took me to write the spec initially and keep it up to date. This says nothing about the number of bugs and man hours we saved in avoided bugs by them being informed when I made a change that would have affected some of their design. I can't understand how people don't like specs!

      --
      "The weirdest thing about a mind, is that every answer that you find, is the basis of a brand new cliche" -
    12. Re:Detailed specs... by GileadGreene · · Score: 1
      Which explains a lot about why the software development process is so broken. In most engineering disciplines, the ultimate customer does not write the spec. They don't have the technical knowledge to do so. Yes, some companies will provide components "to spec". But those specs are developed by whoever is acting as the technical intermediary for the ultimate customer.

      Consider an office building. Would you expect the company that will occupy the office building to write the specs? No. Would they even write the "requirements"? Unlikely. They would hire an architect to determine their requirements, and to spec out a design (blueprints, engineering drawings, materials specifications, etc.) that meets the requirements (probably through several iterations with the customer, showing them different drawings and plans). That spec will get handed off to contractors and engineers, who will then build based on the spec. Note the phrase "based on". In many cases the spec and design will develop in the course of building. (Disclaimer: I have no experience in architecture, but that's my understanding of how the process works)

      The same kind of thing happens in spacecraft design. A scientist will come up with an idea for a mission to collect certain science data using some instrument (I'll assume that the instrument is already defined). Does the scientist spec the spacecraft? No. Do they have some preliminary "requirements"? Maybe, of they've worked on a mission before. But those requirements aren't likely to be final - they may not be technically feasible. So, what happens? The scientist gets a spacecraft system engineer to perform preliminary analysis and design work to refine their requirements, and to spec out a high-level design. The spec and design is then iteratively refined and fleshed-out by a team of engineers, and finally built and tested. (Disclaimer: I have experience on spacecraft development projects. This is exactly how it works. Is it a cut-and-dried, clinical process? No. Nothing involving design is. But the essentials are pretty much the way I just described.

      As an aside: I think that XP and agile development do a nice job of the iterative part of the design process. A really nice job. And iteration is critical to giving the customer what they want. I just don't buy into the myth that upfront design is a bad idea. Upfront specification design, done well, is invaluable for figuring out what to code, and eliminating errors in understanding early in the process. That's particularly crucial for properties which are hard to "refactor" in as you go - stuff like real-time performance, or system-level security.

    13. Re:Detailed specs... by Coryoth · · Score: 1

      In the business world, it generally goes something like this: Customer provides a spec (normally a word document written up by the one person who actually knows how they do business there, and then distorted beyond recognition by 2 months of committee meetings). You read the spec, mutter to yourself about what the hell they're thinking, and begin to write code to match the spec. When you deliver the first iteration, your customer suddenly identifies a need which they didn't spec and which totally breaks your design.

      Why is it that programmers are so quick to embrace iterative approaches to development such as Agile and Test Driven development, but when it comes to the design and specification part they assume it is a one off deal? Developing a specification is an iterative process too, going back and forth with the customer solidifying and fleshing out precisely what the requirements are - and the person writing the spec ought to be someone skilled in specification writing working with the customer (the same way the person writing the program ought to be someone skilled in programming working with the customer). Ideally you could fold this process into an Agile development process, blending later iterations of spec development with iterations of implementation development providing mock ups of what the current spec would likely mean in terms of application.

      Jedidiah.

    14. Re:Detailed specs... by arkanes · · Score: 1

      Well, as a programmer, I'd say that it's in part because business people aren't very accepting of iterative development (it requires a commitment on the part of the user that they tend to resent - they want a week to write a spec, and a week to test it 6 months later, not continuous involvement), and it's in part because if you're going to iteratevely develop a spec you could be iteratevely developing an application instead. Because the spec will still be wrong and incomplete until theres a concrete implementation to work from.

    15. Re:Detailed specs... by Coryoth · · Score: 1

      Because the spec will still be wrong and incomplete until theres a concrete implementation to work from.

      And the implementation will be wrong and incomplete with no assurances until it has been verified against some formal requirements. Not every project needs such assurances, but some projects do, and that can include some business software (where a bug or unforseen security issue may cost millions if not found until post-release). Bothering to spend the time working on a spec can save you vast amounts of time in the test/debug cycle due to the vastly larger amount of static checking and verification you can do on more completely specified code. Some things, like security, can be particularly difficult to refactor into existing code (as Microsoft has often found). Having some level of formal specification makes it possible to identify such issues before you become wedded to (and potentially mired in) a particular implementation.

      Jedidiah.

    16. Re:Detailed specs... by Anonymous Coward · · Score: 0

      I like it, it allows me to read each line in exact the same time.

  3. What? by lordmetroid · · Score: 0

    I find this utterly insane. A big project need documentation and spec is part of that documentation in order to keep the people working on said project in touch with the image of the product the lead developer want it to become.

    Without a documentation other people will just code based on lose stories the leader have told about his vision of the software. Nothing would get done as nobody would know exactly what needs to be done. And huge uncertanty would rule the porject. Also having a documentation will keep the leader itself on the correct path and not stray from it's original design. Crucial for the project to be finished

    1. Re:What? by Scarblac · · Score: 5, Insightful

      Also having a documentation will keep the leader itself on the correct path and not stray from it's original design.

      It is extremely rare that the original design is the correct path.

      --
      I believe posters are recognized by their sig. So I made one.
    2. Re:What? by gol · · Score: 0

      ok... well
      it seems to me linus is stuck on the problem of conflict between spec and reality. In this situation it's very simple - the spec is wrong. The problem with many bad SEs is that they don't accept that Specs and other documents need to evolve during the project as everyone's understanding of the problem grows as well.
      David Parnas' work on the US Navy's A7 aircraft is a brilliant example of how a spec worked. The Spec was so good that when the rights to reproduce and own the plane was sold to the US Army the Spec was used as the contract. It was a thorough description of what the plane did.

      --
      -Drew
    3. Re:What? by Anonymous Coward · · Score: 0

      I find this utterly insane. A big project needs documentation and a spec is part of that documentation in order to keep the people working on said project in touch with the image of the product that the lead developer wants it to become.

      Without (a) documentation other people will just code based on loose stories the leader has (ve) told about his vision of the software. Nothing would get done as nobody would know exactly what needs to be done. And huge uncertainty would rule the project(porject). Also having (a) documentation will keep the leader (itself) on the correct path and not stray from it's original design. Crucial for the project to be finished


      Bollocks, this sort of documentation requires resources the Linux project neither has nor needs.

    4. Re:What? by DanteLysin · · Score: 1

      No one said that the original spec cannot be modified as project time goes on. The ability to identify change and modify the detailed spec, meeting the original goals, makes a good project planner.

    5. Re:What? by rtb61 · · Score: 1

      It will depend upon peoples definition of a specification. In terms of software the initial definition is a set goals to be achieved not the method by which it is achieved, as the method is the code itself. With each software package being a prototype rather than a production model a specification can not be achieved in reality as the specification relates to constructing of a production model (and it's variants) based upon the lessons learned from producing a prototype. So it would depend whether you consider a software specification to be a set of goals as well as a component breakdown (to distribute the workload) rather than a detailed method of producing the code (which of course can't be achieved until the code is written and tested).

      --
      Chaos - everything, everywhere, everywhen
    6. Re:What? by Anonymous Coward · · Score: 0

      If we're revising the spec on a regular basis it sure as hell better not be a formal spec with some approval process, unless you want to spend days dead in the water waiting for the "correct path" to come down from on high.

    7. Re:What? by Rich0 · · Score: 1

      As somebody who has worked on fairly large IT projects with very formal specs - that just doesn't happen. Sure, the specs are supposed to be living documents, but in most bureaucratic organizations it is a miracle they get signed off in the first place.

      What usually happens is somebody ends up just violating the specs and documenting why they did it, and a note is made to fix the specs whenever it becomes convenient (as in once the project is done and it won't hold anything up).

      The problem with the typical project documentation process is that most of the documents never get signed off until the project is almost done, and then the work which actually serves to improve the true quality of the product (which is the software, not the paperwork) gets crammed into the last few months of the timeline.

      Don't get me wrong - specs have a place. However, there is a big tendency on the part of managers to emphasize specs (the stuff they can read and understand) over the design/implementation (the stuff only the coders understand), when the latter obviously has more of a direct impact on quality than the former...

    8. Re:What? by DrXym · · Score: 1
      And it's extremely rare that you would know the correct path unless you've thought carefully about where you intend going. And when you're leading a team if would be a good idea to let them know where you're going too.

      Hence the reason that a spec, or at least a document covering the major points is essential to most projects. Even if you never read the thing again, the act of writing it ensures you've considered the major obstacles and choices that are necessary during the implementation.

      Now perhaps specs and designs don't matter that much to Linus, but to be frank, he's walking a well worn path which is already heavily signposted, and he has many scouts ready who can wander off the path if need be and get lost for days and weeks. Most projects don't work like that and for good reason.

    9. Re:What? by squoozer · · Score: 1

      The problems you mention have, I'm sure, been met by every software developer on the planet however that doesn't necessarly mean that the solution used (just changing the code without updating the spec) is the correct solution. I would argue that the correct solution is to make it cheaper (in terms of time) to update the spec. If a small error is found in the spec that is unlikely (in the developers opinion) to impact the rest of the project it shouldn't take more than a few moments for an update and sign off. The problem with not updating the spec till the end is that occasionaly a change will be made that will affect the system in ways that the original discoverer won't realize and nobody but the developer will know about it. Before you know it a million CDs have been pressed that are all useless (I've seen someing like this happen and I nearly fell off my chair laughing as the team that had screwed up blame stormed each other for a week).

      --
      I used to have a better sig but it broke.
    10. Re:What? by Anonymous Coward · · Score: 0

      Exactly. The act of writing the spec is where you find your design flaws. Finding those same design flaws later when the code is 80% or 90% done is always painful, of not fatal. If you are not discussing your design before the coding starts, you are not engineering, you are hacking. And if you do not update your design as the reality of working hardware and software emerges, you are again not engineering, but hacking. Designs are typically not static until they are mature.

    11. Re:What? by Rich0 · · Score: 1

      I couldn't agree more. Unfortunately, the realities of large organizations often are that doing anything quickly is difficult. Obviously the best solution is to update the spec, and have good visibility of the changes across the development community...

    12. Re:What? by Anonymous Coward · · Score: 0

      If a small error is found in the spec that is unlikely (in the developers opinion) to impact the rest of the project it shouldn't take more than a few moments for an update and sign off.

      Dream on. Much more likely, it involves updating the spec, emailing it to multiple reviewers who are usually in different timezones, guaranteeing no response until at least the following day. Frequently, their response will be that they need to get one of the clients to sign off on it, and that that individual has just gone on holiday for a week.

      That's my experience, anyway.

  4. Linus Says No to 'Specs' by Anonymous Coward · · Score: 5, Funny

    I heard he had good vision. --(o)~(o)--

    1. Re: Linus Says No to 'Specs' by Anonymous Coward · · Score: 0

      You forgot the masking tape in the middle! C'mon, we're self-respecting geeks here.

  5. you mean... by Rui+Lopes · · Score: 2, Informative

    something like this, this, this, this... (should i go on?)

    --
    var sig = function() { sig(); }
    1. Re:you mean... by strider44 · · Score: 2, Insightful

      no if you read the thread he doesn't actually mean like the HTML standard.

  6. Theory by StonePiano · · Score: 5, Interesting

    Who was it that said:

    In theory, practice and theory are the same. In practice, they are not.

    1. Re:Theory by Anonymous Coward · · Score: 0

      If the theory does not match the practice, the theory is incomplete. In other words, fix the theory. Don't make vague and stupid generalizations against it. Those generalizations are nothing more than rationalizations for the sake of the idiot makeing them.

    2. Re:Theory by StonePiano · · Score: 5, Insightful

      If the theory does not match the practice, the theory is incomplete. In other words, fix the theory. Don't make vague and stupid generalizations against it. Those generalizations are nothing more than rationalizations for the sake of the idiot makeing them.

      Yes, you are right... in theory.

      I write software to spec. In theory, that should work. In practice it often does. But often there are gaps in the specification that the guy spec'ing should have seen, but didn't. Perhaps, his kids woke him up 20 times last night, perhaps someone made a bad pot of coffee.

      These gaps in the spec become glaringly obvious when writing the code and in the iterative component testing. That's the practice.

      Now, if you invest 5 times the effort in the specification, you can probably get it all. But in practice, it's often better to prepare a rough, incomplete functional specification. Make a special effort to specify the interface between interacting parts of the system, especially if they are developed by differnt teams. Then allow the developers more scope to communicate and modify this in the development process.

      I'm not saying this is a good idea for building spacecraft. But it makes sense for commercial software development.

    3. Re:Theory by Anonymous Coward · · Score: 0

      Yogi Berra

    4. Re:Theory by Ryguillian · · Score: 1

      Unfortunately, a lot of people are changing reality to match theory.

    5. Re:Theory by Anonymous Coward · · Score: 0
      Who was it that said: In theory, practice and theory are the same. In practice, they are not.

      achurch

    6. Re:Theory by cow-orker · · Score: 1

      And still there's nothing more practical than a sound theory, someone else added.

  7. Linus: It's like real science. by loqi · · Score: 1, Funny

    Incase you were wondering if CS was indeed a "real" science or not.

    --
    If other reasons we do lack, we swear no one will die when we attack
    1. Re:Linus: It's like real science. by mwvdlee · · Score: 1

      Considering CS is merely a form of mathematics and mathematics isn't science because it cannot be falsified, CS isn't science. ;)

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    2. Re:Linus: It's like real science. by squoozer · · Score: 1, Interesting

      I'm not sure all of CS is akin to maths some is closer to engineering IMHO. Having said that I don't think CS is a science. Science to my mind discovers things about the universe around us. This description perfectly fits physics, chemistry and biology as well as their off shoots such as astronomy. CS on the other hand hasn't told us one single truth about the universe. Hence it is not science. It has, however, applied the truths we have discovered about the universe which oddly enough is the definition of engineering. CS just jumped on the science bandwagon because it got more funding / sounded better.

      --
      I used to have a better sig but it broke.
    3. Re:Linus: It's like real science. by mwvdlee · · Score: 2, Insightful

      CS may look like engineering, but IMHO it is closer to math because of one simple fact; engineering (partly) has to do with unpredictable variables such as wear-and-tear and environmental influences. In CS, everything boils down to simple boolean mathematics (the microprocessors) thus everything is predictable given sufficient time to calculate.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    4. Re:Linus: It's like real science. by nickco3 · · Score: 4, Funny

      Having said that I don't think CS is a science.

      Yes, any subject with 'Science' in the title isn't. I forget where I heard it, but it is a useful rule of thumb.

      Computer science ... check. Political science ... check. Domestic science ... check. Social science ... check. Rocket science ... er, damn.

      --
      -- Nick "Hallo this is Beel Gates, und I pronounce weendows as ... WEENdows"
    5. Re:Linus: It's like real science. by Daniel+Dvorkin · · Score: 1

      Rocket science isn't science either; it's engineering. Of course, there's no subject called "rocket science" -- people who want to be "rocket scientists" study aerospace engineering.

      That being said, although of course computers are synthetic, there are times when modern systems are so complex and unpredictable that they feel like something from the natural world, and thus a scientific approach is the one that works in practice. The best hackers think very much like scientists, and it's no surprise that increasingly scientists are becoming hackers as well. The irony here is that this is the kind of thinking that CS tries to discourage.

      --
      The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    6. Re:Linus: It's like real science. by Anonymous Coward · · Score: 0

      Rocket science is engineering... check and mate.

    7. Re:Linus: It's like real science. by arkanes · · Score: 1

      Except that this is totally wrong, because the foundation of CS, which is not software design and CS majors make shitty programmers, is a theory of calculation and what can and cannot be calculated. And because of stuff like the halting problem, we know that there are fundamental theoretical limits on what we can calculate and predict.

    8. Re:Linus: It's like real science. by syrinx · · Score: 1

      Considering CS is merely a form of mathematics and mathematics isn't science because it cannot be falsified, CS isn't science. ;)

      Exactly. My theory is that if you have to specifically call it "science", it probably isn't.

      Computer science, social science, creation science...

      Everyone knows, say, physics is a science. You don't have to call it "physical science".

      --
      Quidquid latine dictum sit, altum sonatur.
  8. Amen by Anonymous Coward · · Score: 5, Funny

    Linus has spoken.

    1. Re:Amen by dodobh · · Score: 1

      s/Amen/RAmen/

      --
      I can throw myself at the ground, and miss.
  9. No to Specs... by Anonymous Coward · · Score: 5, Funny

    ..big _YES_ to underscores.

  10. I don't get it - of course you need specs by Sanity · · Score: 4, Insightful

    How are you supposed to write software which interoperates with other people's software without relying on a specification to define the interface? I have read some of the thread and I really can't understand where Linus is coming from here.

    1. Re:I don't get it - of course you need specs by Anonymous Coward · · Score: 0

      I would expect him to appreciate communication after doing so much team work via the net. He was probably misunderstood there. He talks about contamination of specs while others defend the concept of spec.

    2. Re:I don't get it - of course you need specs by gowen · · Score: 3, Insightful
      He talks about contamination of specs while others defend the concept of spec.
      Yes, but "Linus Says No To Bad Specs" just doesn't generate the same level of ad revenue^H^H^H^H^H^H^H^H^H informed debate on slashdot.
      --
      Athletic Scholarships to universities make as much sense as academic scholarships to sports teams.
    3. Re:I don't get it - of course you need specs by Anonymous Coward · · Score: 0

      Finland

    4. Re:I don't get it - of course you need specs by Sanity · · Score: 1
      "Linus Says No To Bad Specs"
      So the gem of wisdom Linus has shared with us is that bad specs are, um, bad? Wow, who'da thunk it.
    5. Re:I don't get it - of course you need specs by RzUpAnmsCwrds · · Score: 0, Flamebait

      This embodies Linus's bullshit attitude of not standardizing on a binary compatible ABI in the Kernel. You cannot be certain that modules written for today's kernel will work in toomorrow's kernel.

      Microsoft Windows now has 5 years of driver binary compatibility. Linux doesn't even have 5 days of binary compatibility - every minor kernel revision breaks binary modules, as does changing certain kernel options. You have to recompile every module for every kernel.

      You ever wonder why there are few 3rd party drivers for Linux? Because a manufacturer doesn't want to release their source code, and because they don't want to provide binary modules for every permutation of every kernel revision in existance.

      Now, this alone is bad, but now you consider the fact that the underlying driver architecture is coninually changing. Did you write OSS drivers five years ago? Too bad. Were your X drivers written for XFree86? Time to update them for XOrg.

      Moreover, Linux has been quoted as saying that the breaking of binary compatibility between kernel releases is intentional. That's right - he wants it to be hard to write binary modules for Linux. You don't want to use the platform the way he wants you to? Too bad. Use another platform.

      Well, guess what: I use a platform that supports my hardware. That happens to be Windows.

    6. Re:I don't get it - of course you need specs by Anonymous Coward · · Score: 0

      You talk about utopia and so does Linus. Constant ABI means less innovation, dynamic annoys hardware vendors and forces them to go open source which might not always be possible (damn 3D IP). Each one is not optimal. But think about future, which will provide better software funning on state of the art hardware ? Which OS ran was first AMD64?
      Hardware vendors should compete in silicon world leaving software _and_ specs free. I repeat, in theory.

    7. Re:I don't get it - of course you need specs by Enrico+Pulatzo · · Score: 1

      The issue isn't that there shouldn't ever be a written spec, as much as people's implementation of a spec IS the spec to work towards.

      In reality, an interop specification should be updated regularly to keep track of all the little things people do to break them, in a similar way that there are myriads of CSS charts online that are functionally addendums to the specification, letting designers know that IE broke a certain thing, so avoid using that part of the spec, unless you also implement this workaround...

      I hope that makes sense/clarifies the situation somewhat.

  11. specs are useful, but depends on objective by dorkygeek · · Score: 2, Interesting

    Specs are not best for software whose features are to grow with time, and where nobody ones what people want to add more. Specs are best when you have a fixed set of requirements, which you have to meet in order to complete your work.

    Still, specs may be useful for example to identify certain aspects of a Linux sub-system. But it may not be desirable to have a full spec defining all the goals of Linux, because these goals are a rapic moving target and therefore steadily changing. Of course, there are some features which are built to stay, but specifying specific features in detail while other objectives are changing or even unknown, is hard and may not give the desired results.

    --
    Windows is like decaf - it tastes like the real thing, but it won't get you through the day.
    1. Re:specs are useful, but depends on objective by Decaff · · Score: 1

      Specs are not best for software whose features are to grow with time

      Why not? Specs can change and grow with time as well.

    2. Re:specs are useful, but depends on objective by Anonymous Coward · · Score: 0

      If you rewrite the spec as you go along Id call it documentation, not a spec ;)

    3. Re:specs are useful, but depends on objective by dorkygeek · · Score: 1
      Why not? Specs can change and grow with time as well.
      Indeed, but in the Linux development process, I guess that a spec of a new feature is written, then implemented, and if problems occure, the spec is changed again. If you only write a spec, then implement, then change the spec and reimplement again in short cycles, then the spec can serve nothing more as a description one abstraction level higher than the actual code itself, instead of being a planning device with long-term stability.
      --
      Windows is like decaf - it tastes like the real thing, but it won't get you through the day.
    4. Re:specs are useful, but depends on objective by Skye16 · · Score: 1

      Mmmm, but specs can change. Obviously you don't want to change them daily (what's the point???), but they still have a degree of flexibility. Also, if you create specs for all the subsystems, then combine them all together, what does that give you? A spec for almost the entire system (sans the way it's all linked together and interoperates, and it really does make a good deal of sense to create a spec for THAT, too).

      If there comes a point where the particular subsystem spec or overarching "wrapper" spec is a bit "wonky", then get together with a few more engineers, figure out how it "should" be done, rewrite the spec, and implement the desired change.

      I've only been out of college and developing for a year and a half, but this method seems to work best for us. Of course, when we do change the specification/requirements, we have to get the client to sign off on them, but as we always have justification, this is an extremely minor problem.

      Who knows, though. Maybe I'm missing something.

    5. Re:specs are useful, but depends on objective by dorkygeek · · Score: 1

      Well, don't get me wrong. I myself wouldn't want to develop without having a thorough spec (written by either the requirements analysts or myself), but with Linux where there is quite chaotic development in terms that people are writing parts hidden away in their closet and then suddenly want to have it merged into mainline, where noone expected such a thing, it may not be desirable to have an overall spec.

      --
      Windows is like decaf - it tastes like the real thing, but it won't get you through the day.
    6. Re:specs are useful, but depends on objective by Oligonicella · · Score: 1

      You don't rewrite the spec to match the coding. You rewrite (portions of) the spec if you find a logical error.

    7. Re:specs are useful, but depends on objective by Skye16 · · Score: 1

      I think there are pros and cons. I'm not saying you're wrong or your opinion is flawed. I could easily understand why a spec may not make sense in these circumstances. I don't know enough of the linux kernel development process to make an informed contribution, but hopefully, if my educated guesses are right, what I have to say will be _somewhat_ useful in consideration.

      I assume anyone can write a patch for the kernel that introduces a new feature, etc, etc. I also assume these patches are submitted to _someone_ (or many someones) who review them thoroughly not only for elegance and a lack of bugs, but also in how the whole thing applies to the direction they see the kernel going. At least, with just my cursory knowledge, that would seem to make some bit of sense. And if so, in a way, they already have a spec defined. It's just in their head. If they were to formally write it in a paper, discuss it amongst themselves (I know Linus does the major development stuff, but doesn't that.. uhm... Andrew Mortenson (??? (please don't hit me!)) have some say? I guess he only does maintenance work, but still, that seems to be fairly important (at least in my eyes). Or maybe there are others. If so, it would make sense for them to write this spec out, clearly define where they see the kernel going as of right now, and then letting the world see it. That way some dude in his closet can have an idea on what would be worth developing and what wouldn't. Or, if he had a really great idea, but went against the spec, he could either a: write up the code he wanted to do in the first place, then submit it along with a detailed justification in why it deviates from the spec, and hope that it would be amazingly great enough that those in charge feel the same way. Or, plan b, he can be safe and just submit detailed justification on why the spec should be altered, get approval, and then develop the code.

      Either way, a spec exists - in some nebulous form. Knowing what it is in advance may scare off those who would try more outlandish things (which could be bad - or it could be good - or it could be both), but I think, overall, it may be more helpful. Even if it changes relatively often. Maybe it changes half a dozen times in each 2.x cycle. Maybe, with time, it only changes with each y.0 cycle. Who knows.

      Anyway, I'm sure the kernel developers are discussing (or have discussed) this in depth, and maybe this "argument" (more a consideration) has been rebuffed. That's okay. But for those of us who delight in hypothetical speculation, it was worth posting here on /.

    8. Re:specs are useful, but depends on objective by bani · · Score: 1

      ELF anyone? It's stood the test of time very well.

      How about OpenGL?

      specs are fine as long as they are forward-looking. ELF and OpenGL are examples of both which have been wildly successful and have managed to grow with time just fine, thank you very much.

      there are many more examples. just because a few specs might suck doesn't mean all specs suck.

    9. Re:specs are useful, but depends on objective by Grab · · Score: 1

      but with Linux where there is quite chaotic development ... it may not be desirable to have an overall spec

      Surely this is exactly where you *do* want some kind of spec. Suppose several people are building separate parts of a car independently. If one person has built the wheel-arches with an 18" diameter, if the person responsible for building the wheels hands you a 20" wheel then you're screwed. It might be the most beautiful wheel in the world, but you'll have to either throw it away or take an angle-grinder to the already-assembled wheel-arches.

      In the case of Linux, a spec which tries to specify in detail exactly what each part should do is doomed. But if it at least says what each part's responsibilities are, and what the interface is, then that's all you need. "Does my driver free this memory, or does yours?" "Whose code issues the callback?" Those kind of questions.

      I'm actually amused by the hypocrisy of Linus here. Without POSIX, Linux, BSD and the rest would all just be yet another failed machine-specific OS. It's only POSIX compliance that's made them workable, because it's only POSIX compliance that's allowed people to move from regular UNIX to Linux/BSD. Similarly, without X then they'd be without a windowing system, and X is 100% fixed in standards documents. The whole thing is written in C or C++, which again is fixed in standards so that the code will still compile on Intel or other platforms. Sadly this seems symptomatic of many F/OSS leaders. They've taken their college hobby, managed to get paid for it afterwards, and never looked back - and this means they've missed out on any real-life experience. Of those who have had "work", too often this means university teaching, Bell Labs, Xerox Park or somewhere similar where there were no targets, no deadlines and no quality control. In other words somewhere away from *real* software engineering.

      Basically, Linus seems a very, very skilled coder/hacker. However as a software engineer, I *really* wouldn't want him around me, working on safety-related software.

      Grab.

    10. Re:specs are useful, but depends on objective by Anonymous Coward · · Score: 0

      So which version of OpenGL do you code to? 1.0? 1.1? 2.0? 3.0?
      And what if the hardware doesn't support it? or supports it incorrectly?
      Do you code to the spec or reality? those are the questions.

    11. Re:specs are useful, but depends on objective by Decaff · · Score: 1

      If you only write a spec, then implement, then change the spec and reimplement again in short cycles, then the spec can serve nothing more as a description one abstraction level higher than the actual code itself, instead of being a planning device with long-term stability.

      I'm not sure what is wrong with that. A spec should settle down into something stable in the long term.

  12. Specs are for geeks by sore+loser · · Score: 1, Funny

    contact lenses a better choice.

  13. Missing the point. by Anonymous Coward · · Score: 5, Insightful

    The whole discussion was centered around implementing specs. And the point made by linus was that one should not implement specs literally, not to structure the software as the specs are structured. He did not say the software should not adhere to the interface given by the specs. So the software should work like specified, one should just write the software in a form which makes sense for the larger scope of the software, not one limited to the scope of the specs.

  14. In other news by $RANDOMLUSER · · Score: 5, Funny

    Bill Gates says "Beta testing is for sissies".

    --
    No folly is more costly than the folly of intolerant idealism. - Winston Churchill
    1. Re:In other news by Tx · · Score: 1

      You misspelled "paying customers".

      --
      Oh no... it's the future.
    2. Re:In other news by Anonymous Coward · · Score: 0

      In other news:

      Steve jobs says "I'm a sissy".

    3. Re:In other news by houghi · · Score: 1

      Bil Gates says: "Paying customers is for sissies."

      --
      Don't fight for your country, if your country does not fight for you.
    4. Re:In other news by xtracto · · Score: 1

      Tell that that to Google...

      --
      Ubuntu is an African word meaning 'I can't configure Debian'
    5. Re:In other news by Seumas · · Score: 1

      In Soviet Russia, customers pay you!

    6. Re:In other news by Anonymous Coward · · Score: 0

      but thats capitalist russia :(

    7. Re:In other news by Ex-MislTech · · Score: 1

      Bill gates says Beta testing is for customers ....

      --
      google "32 trillion offshore needs IRS attention"
  15. You read the code by Rogerborg · · Score: 2, Interesting

    That's pretty much what it always comes back to with Linus.

    --
    If you were blocking sigs, you wouldn't have to read this.
    1. Re:You read the code by tendays · · Score: 1

      Well, just rtfb (read the f*ing binary!) :-)

    2. Re:You read the code by Anonymous Coward · · Score: 0

      Should we understand that he read the SCO code? :-)

    3. Re:You read the code by Kjella · · Score: 2, Informative

      1) You often don't have the code (is this the "everything should be OSS" argument?)

      2) If you had the source code to IE5, would you consider it a good spec?

      Kjella

      --
      Live today, because you never know what tomorrow brings
    4. Re:You read the code by Rogerborg · · Score: 1

      1) Yes, it's the everything should be OSS argument. It's not a hippy argument; as a developer who both writes and uses APIs and SDKs, the more code sharing that goes on in both directions, the easier my job is and the sooner I go home.

      2) Yes, for the specific functionality that I'm interested in. An architecture diagram isn't specification. A user guide isn't specification. A spec says exactly what the product does. When I ever see a spec that does that, I might change my mind about specs being necessary.

      --
      If you were blocking sigs, you wouldn't have to read this.
    5. Re:You read the code by GileadGreene · · Score: 1
      A spec says exactly what the product does. When I ever see a spec that does that, I might change my mind about specs being necessary.

      Try this example, for a radiation therapy machine. You might also try this paper on formal specification of TCP/IP and parts of C.

      The problem isn't that specification itself is bad. It's that most "specifications" are written by people who don't know what they're doing, and end up being vague and wishy-washy.

    6. Re:You read the code by Rogerborg · · Score: 1

      And the specs exactly describe the functionality? You've personally checked that, right?

      --
      If you were blocking sigs, you wouldn't have to read this.
    7. Re:You read the code by GileadGreene · · Score: 1
      No, I have not "personally checked it".

      However, in the case of the radiation therapy controller I think it's pretty safe to assume that the folks doing the implementation were extremely careful to ensure that the implementation matched the spec, and, in cases where there was a deviation from the original spec, to incorporate that deviation back into a revised spec and check that the overall system logic was maintained. So yeah, I'm pretty confident the spec exactly decribes the functionality.

      In the case of the TCP/IP formalization, the spec was carefully reverse engineered from existing TCP/IP implementations, and extensively tested to ensure that it accurately captured corner-cases. As you would know had you bothered to actually look at the paper in question. So, again, I feel confident that the spec accurately represents the functionality.

      On a more philosophical note, I find the notion of "code as spec" repugnant at best. Essentially what you're saying is that "the purpose of the software is what it does". Which has two problems IMHO: (a) by definition there's no such thing as a bug in such software (which isn't really an acceptable notion in the real world), since "bug" is simply another name for "deviation from spec"; and (b) anyone who wants to really understand the behavior of the software has to do the same kind of intense reverse engineering that the folks in the TCP/IP paper did. Personally, I'd rather see real specs that describe what a piece of software is supposed to do, which the implementation is programmed against, and which are revised to reflect any changes that occur during implementation (with the added advantage that these changes can be analyzed to ensure that the don't break the system in some subtle way). I'm not talking about hand-wavy "architecture diagrams" and the like. I'm talking about precise behavior specifications that permit real understanding and analysis.

  16. Spec Change! by linebackn · · Score: 2, Insightful

    And after three long hard years of implementing a huge amount of code as per specifications, finally wrapping things up and looking to moving on to bigger and better things... they go and change the specs! Arrraggg!!

  17. specifications are good for real world stuff by the_thunderbird · · Score: 0

    Right as a software developer, I have both written software with specifications (that I have written or been handed) and I have written software blindly with no real path...

    Quite frankly I think Linus, is not on the ball there, as both an engineer and architect, I would say that using a spec can result in very well thought out programs.

    A specification does not have to reflect on reality at all! It is means to an end to explain how a program *should* work! For example, if I wanted to write an accounting package and knew nothing about accounting, I would fail miserably if I were to write it with no specifications to give me some sort of direction or understanding... The same goes for financial trading systems, if I knew nothing about it, I couldn't write it!

    You need some level of documentation saying, the functionality of the program has to work in this way, i.e. we want 1 + 1 to eqaul 2, it doesn't matter how you write it in the end, as long as it still equals 2. That gives a software program some sort of direction...

    A spec is only theory to give you direction... That what makes an architect different from an engineer, the architect says, "I want it to do this" its then up to the engineer (which linux is!) to implement it in a real world manner!

    1. Re:specifications are good for real world stuff by packman · · Score: 3, Insightful

      I think there's a lot of confusion over the word "specs". That can mean a few things for software:

      1) What the program should and shouldn't do. These can be "demands" from the customer. Should be non-technical, not too detailed - but should be clear. If the customer has specific I/O demands, this should refer to other documents for this, don't mix these things.

      2) Internal software analisys. Should describe the internal main blocks, in most software companies I've worked, this is done on a blackboard with all important dev's there brainstorming about a project. If it gets really complicated someone might be victimized of putting that on paper :) It shouldn't be too complicated, but the purpose of these kind of "specs" are often mis-interpreted by "pure analysists", what in some cases ends up in a way to detailed almost pseudocode alike book. This is BAD, by theory leaves no room for interpretation, but in practice it does. The person who wrote this could have written the code instead - and would have found all contradictions, errors, and would have been faced with all practical problems his "point of view" suffers from.
      Sadly enough - these kind of specs (in general) usually end up way too detailed. Programmers always have their "speciality" if they are left with some freedom. Let them do their own thinking give them an "IO spec" for their part - and let them do their job. At least that's what I do, I don't want code-monkeys in my team - I want individual coders who actually understand what the hell is going on. Too bad they're becoming harder and harder to find. I blame Visual Basic *grin*

      3) An I/O or interface spec. What goes in and what goes out, described in what form, as short as possible, with flexibility so someone can easily add a proposal/extention to it. These are not easy to make, but luckily I work in a competitive team that understands software writing :) Basicly these are nothing more than a written down version of good and clear agreements. If reality changes - these should be changed, never the other way around, but which happens way too much.

      These are 3 completely separate things. All 3 need to be done more or less for major projects, some can be left out. Mixing these should be avoided as much as possible. The first 2 I consider to be "software specs", the last-one is something completely different and I see a lot of people here confusing these. HTTP, TCP/IP, HTML, XML, XHTML, RSS and even POSIX aren't software specs, these are standardized I/O / interface specs. Such specs are in general a good thing, they describe how something should be used, so multiple programs can "communicate" with each other using the same interface.

      As far as I've seen, writing software to specs is an utopia. The worst specs usually are specs written to an existing program. It's fine as "documentation" and shouldn't be used for anything else, certainly not for writing a new version. Writing detailed specs after a project is finished (well - as far as that's possible) usually has little point. Writing documentation on the other hand has a point, but this is widely regarded as a boring unimportant job (and I can't blame anybody who does :P)

      Anyway - what I suspect that Linus means is a mixture of these 3 - a mess which mixes everything in a way to detailed form. Most specs that are written are plain wrong, bad, and mix too many things. Most of the software specs are written by people who think they know everything. Nobody does.. except me offcourse :p

    2. Re:specifications are good for real world stuff by the_thunderbird · · Score: 0

      Agreed, although in a lot of ways, I have always been lucky enough to have had a grace period to prototype things myself :) so my specs are usually accurate! :p

  18. Specs are indeed useless by TallGuy · · Score: 1

    Usually when you write a driver for a specific piece of hardware, you take a look at the specs (of that piece of hardware and/or the stuff the hardware communicates with), and then start implementing it according to specs. Then you try to actually get it working, and the crap piece of hardware doesn't *quite* conform to the specifications. It leaves something out here, does something unexpected there, and before you know it, your driver is riddled with exceptions to make it actually *work*.

    It's much better to design your driver to actually work with the hardware, and just disregard the specifications. It means your driver will actually work, instead of conforming to specs and being buggy as hell.

    1. Re:Specs are indeed useless by Tx · · Score: 1

      "Disregard the specifications" - so are you saying that a nearly accurate hardware specification isn't a good starting point? You don't disregard the specs, you just don't assume they're perfect. Use 'em, don't trust 'em.

      --
      Oh no... it's the future.
    2. Re:Specs are indeed useless by RAMMS+EIN · · Score: 1

      ``It's much better to design your driver to actually work with the hardware, and just disregard the specifications.''

      And how do you propose to write a driver that works with the hardware, without looking at the spec of how that hardware works?

      The right way to proceed here is to write the driver according to the spec, and when you find out something in the hardware doesn't work as detailed in the spec, notify the authors of the spec and the hardware, so that the mismatch can be resolved (which will usually boil down to changing the spec, as changing hardware is expensive).

      --
      Please correct me if I got my facts wrong.
  19. Problem that is Linus... by msormune · · Score: 1

    I guesss no one can argue Linus is a very good prorammer... YEAH RIGHT. Is Linux kernel development done at a professional level? Many people complain that Microsoft changes APIs every once in a while. How often does this happen with Linux? I guess since Linus doesn't care about specs, he can change Linux specs (APIs) as he pleases. Never mind all the stuff that gets broken. Oh yeah, and doesn't Linux aim for POSIX compliance? Isn't that a spec also? Huh? Maybe Linus should also write his own ATAPI, SCSI and USB command stuff? Take that ALSA also out. In fact, lets just forget about the whole x86 architecture.

  20. Good specs and bad specs by RAMMS+EIN · · Score: 1

    I think there are good specs and bad specs. Good specs are the ones that are drawn up to standardize and harmonize things that are already out there. Bad specs are the ones that are written before any implementation exists. In the former case, specs are designed with hindsight, and with the knowledge of what features are desired, and how they are commonly implemented. In the latter case, specs can and will be designed without any knowledge or consideration for practical issues. Linus seems to be ranting against the bad specs, while overlooking the good ones.

    --
    Please correct me if I got my facts wrong.
    1. Re:Good specs and bad specs by Fallus+Shempus · · Score: 1
      Meanwhile back in reality...
      I have to write specs to define work that is required all the time,
      yes there are times when something is overlooked so the spec changes during coding.
      Sometimes the problem is more with the coder not having the intelligence to
      figure out when something just won't work.
      And Sepccign is a pain in the arse, but you quickliy learn to do it right
      You're a big man, but you're in bad shape. With me it's a full time job. Now behave yourself.
  21. What an idiot! by kevin+lyda · · Score: 5, Funny

    Who is this Linus guy anyway? I bet he's never managed a software project of any complexity.

    Personally I've found specs to be incredibly useful. I'm currently developing a middleware project that takes a complex search pattern and applies it to a streams of delimited character objects and while our team of 40 software software engineers has yet to actually start developing we've produced a fantastic spec that will greatly simplify coding it.

    I suspect we'll have this general regular expression parser up in running in less than 80 man years of effort thanks to our full and detailed specs.

    --
    US Citizen living abroad? Register to vote!
    1. Re:What an idiot! by LiquidCoooled · · Score: 1

      Make sre your spec includes an appendix listing every possible permutation of the regexp including detailed hand crafted examples of it in operation.

      A screenshots section would be handy as well for the slashdot crowd.

      --
      liqbase :: faster than paper
    2. Re:What an idiot! by CortoMaltese · · Score: 3, Funny
      Who is this Linus guy anyway?

      You remind me of Oolon Colluphid's trilogy of philosophical blockbusters:

      • Where Linus Went Wrong
      • Some More of Linus' Greatest Mistakes
      • Who is this Linus Person Anyway?
    3. Re:What an idiot! by dascandy · · Score: 2, Funny

      I did a public domain one in 3 days. Does that make me 5333 times as productive as any of you?

      Note to people impressed, I'm looking for a job actively :). Am willing to move virtually (IE, open a different X forwarding session).

    4. Re:What an idiot! by Anonymous Coward · · Score: 0
      Am willing to move virtually (IE, open a different X forwarding session).
      I'm sorry, my organisation aims at actively supporting web standards and thus people that mention "IE" are not what we're looking for.
    5. Re:What an idiot! by Anonymous Coward · · Score: 0

      I been losing respect for the guy for a long time. His ignorance and attitude towards the kerneal development is getting damn near ESR. I was getting paid back in 1992 when he wrote the first kernel, a project I was a good 10 million lines of code. If I said "specs" are useless, I would have been wrong and fired too :)

      Here is microsoft's new plan against linux, is to PUBLISH idiotic emails from Linus And ESR. That way , IT Managers with ANY decent education and experience will worry if they trust a Cowboy Linus and crew to write the underline host OS.

      Linus brainchild, is VERY fragamented, look at all the linux distros.. its totally pathetic.. Only good come out of this whole thing since 1992, is force microsoft to innitovate new things. Like the .NET platform.. (vista is a failure as of this moment) but I believe .NET isnt.

    6. Re:What an idiot! by meringuoid · · Score: 1
      Linus brainchild, is VERY fragamented, look at all the linux distros.

      Mostly running pretty much the same kernel, though. They compile it with different options, and sometimes do some patching, but they've never outright forked it.

      The difference between, say, SuSE and Ubuntu is about package management and configuration tools and desktop apps. Gnome or KDE, XFree86 or X.org, RPM or APT... But at the kernel - which is the only part Linus has anything at all to do with - there's very little in it.

      --
      Real Daleks don't climb stairs - they level the building.
    7. Re:What an idiot! by The+Evil+Couch · · Score: 2, Funny

      Well, that about wraps it up for Linus.

    8. Re:What an idiot! by Ex-MislTech · · Score: 1

      Really...

      This does sum it up best . A lot of ppl post here, and not very many of them
      have anything comparable to Mr. Torvalds work on their resume' .

      When ppl have a project with half the impact that Linux is yet to have under
      their belts, then let them step forward and tell the man how to do his job .

      Meanwhile, we all got a bit of work to do to catch up I think .

      --
      google "32 trillion offshore needs IRS attention"
    9. Re:What an idiot! by Anonymous Coward · · Score: 0
      I suspect we'll have this general regular expression parser up in running in less than 80 man years of effort thanks to our full and detailed specs.
      You're talking of Perl 6, aren't you?
  22. specs and designs by idlake · · Score: 4, Interesting

    Linus does code to specs: the kernel is intended to comply with all sorts of formal and informal specs, and its developers pay attention.

    What is missing is people writing and committing to specs for some important kernel internal interfaces and functionality. This attitude goes hand in hand, of course, with the lack of stable internal interfaces within the Linux kernel and is one of the major reasons why the kernel source has bloated to such a humungous size and why every kernel release needs to include all the accumulated garbage of the past decade. If internal kernel interfaces were specified and committed to for each major version, then driver and module development could be separated from the rest of the kernel.

    Of course, Linus is right in one area: most specs are useless. There are two primary reasons for that. Either, the spec is poorly written; there are lots of those. Or, the spec describes a bad design; there are many more of those. Many of the original UNIX design documents were exemplary specs: they told you concisely what you could and could not rely on. On the other hand, many recent standards (like HTML or SOAP) are examples of well-written specs that are bad specs because the underlying designs suck. But the fact that many specs are bad doesn't mean that it is inevitable that the Linux specs would be bad; that only depends on Linus.

    1. Re:specs and designs by msormune · · Score: 1

      Oh please do tell us, why SOAP sucks. I get the popcorn ready.

    2. Re:specs and designs by mrsbrisby · · Score: 1

      And the original UNIX "design specifications" didn't become UNIX. Just like the original HTML "design specifications" didn't become HTML. They are both great examples of REALLY BAD specifications.

      UNIX's engineers had a plan- not a complete one, and some might say not even a good one, but it was flexible enough to encourage it's use. Through using it, problems were found, and features added (e.g. the sticky bit) but the "original UNIX" is absolutely nothing like the unix we use today, just as the original UNIX "design specifications" didn't match the first most useful UNIXes, it doesn't match them today either.

      What people fail to understand is that we call things like POSIX a spec, so of course we're talking about the same thing. POSIX is not the kind of "bad specification" because what it does is specify how things are presently being done, and not how they ought to be done in the future.

      In the few cases where POSIX _did_ try and get their grubby little hands into something not yet formalized (socklen_t anyone?), it was met with brutal resistance and real world problems (which is why socklen_t == int _everywhere_).

      HTML is another fantastic example. Amya was the HTML _specification_, and nobody liked it or used it. It was and still is the most glaring example of how not to write a web browser. It was, of course, written entirely to specification, but could never view even a reasonably common web page. Modern HTML "specifications" are an examination on what worked, and in the few cases they've attempted to codify things that nobody's using yet and have been met with real-world problems and complete lack of implementation.

      SOAP is of course, everyone's favorite example because the idea is so simple. It's not like POSIX (an operating system) or HTML (a mobile application transport), but it's doing one very simple thing: value marshalling.

      They even did a wise thing by letting XML specify how things get transformed into containers- and of course, by using XML many people saw a few SOAP exchances and said "well this looks easy" so partial implementations for SOAP are everywhere.

      But SOAP isn't easy. It does a lot of things that most SOAP implementations simply don't do (exception handling? session routing?) - SOAP is a big complicated specification, and there are an extremely few number of real world complete implementations. The end result is that most people use the lowest common denominator, or MS-SOAP (or someone else's targetted implementation).

      The end result is that specifications have never improved interoperability by themselves, the best specifications are the ones that describe something already done, and the worst specifications are the ones that describe something that hasn't been done yet.

      The reality is incredible: Specifications suck. I make roadmaps and keep notes, and do a large amount of unit testing, but NEVER do I write a specification for anything that I didn't already finish.

    3. Re:specs and designs by idlake · · Score: 1

      The end result is that specifications have never improved interoperability by themselves,

      They aren't supposed to "improve" interoperability, they are supposed to allow multiple people to write code together in the first place. If you don't write down how you break up a big software project into lots of little projects, then the people whose head that sort of information resides in become the bottleneck. Sounds familiar?

      the best specifications are the ones that describe something already done

      Yes, and exactly those are missing from the Linux kernel: stable specifications for functionality and interfaces that are well-understood and for which writing code is routine. People aren't asking Linus to write specifications for every piece of code he likes to play around with.

    4. Re:specs and designs by mrsbrisby · · Score: 1

      They aren't supposed to "improve" interoperability, they are supposed to allow multiple people to write code together in the first place. If you don't write down how you break up a big software project into lots of little projects, then the people whose head that sort of information resides in become the bottleneck. Sounds familiar?

      What, pray tell, do you think "interoperate" means?

      the best specifications are the ones that describe something already done

      Yes, and exactly those are missing from the Linux kernel: stable specifications for functionality and interfaces that are well-understood and for which writing code is routine. People aren't asking Linus to write specifications for every piece of code he likes to play around with.

      This thread was not about asking Linus to commit to and document a particular set of behavior- something that's bad, but no where near as bad as that.

      This thread is about defending the SCSI layered model and implementing components to fit it, instead of components that are easy to manage and understand. The SCSI specifications stink horribly, and Linux doesn't follow them.

      Does this cause any real problems? Does it mean hardware doesn't work or data is lost? Absolutely not! This is about defending a stupid model by saying it's a specification.

      A really good HTML-ish analogy is like saying LYNX doesn't support HTML because it sometimes ignores the <b> tag (on displays it can't make something "bold")

      A really good SOAP-ish analogy is like saying a SOAP implementation isn't conforming because it doesn't produce exceptions (for example, if it were implemented in C)

      A really good UNIX-ish analogy is like saying a UNIX implementation isn't conforming because it supports ISO9660 filesystems (original unix only supported 6-character filenames and that's simply how read() worked on a directory, while ISO9660 supports much longer filenames).

      Who gives a shit if it's true or not. The point is that the specification is stupid, and it isn't to be followed (just) because it's a specification.

      As I tried to point out: The problem is that we call other things a specification- other things that might even be actually useful, but aren't the same thing as this.

    5. Re:specs and designs by matfud · · Score: 1

      Hear hear,

      I think the worst culprits are the specifications designed by committie (generally a committie trying to improve on a previous spec). Invariably the previous spec was reverse engineered from the current world (what is actually being used). The new spec is then made to be backward compatible (i.e. it includes all of the worst aspects of the orignial spec) and also tries to add the pet feature of every body involved in the committie. HTTP 1.1, CSS 2 and 3, xpath 2, etc are all instances of this. Nobody can implement any of these correctly because they are so complicated they cannot be specified correctly (or completely). Therefore each generation of the spec gets abused by everybody as the spec can be interpreted in different ways. Then the next generation is designed by a committie and has to handle all of the bastardized approaches that the previous spec allowed and in addition add a plethora of new features (many of which will never be used).

      Most new specs are designed to be extensible. This means they should also be simple as specialist domains can add thier own extensions as needed and develop thier own specs. However this never seems to be the case. The spec tirs to include everything.

      Specs derived from implementations tend to be far more reliable as they are:
      a) simple. They generally only specify the functionailty that is needed to perform the task
      b) tested. They are derived from a working example taht has already overcome many if not most of the problems that need to be solved.

      Cheers

      Matfud

  23. Sounds fair enough to me by Rogerborg · · Score: 4, Interesting

    At a conservative estimate, I've pissed away half of my lifetime development effort dealing with instances where the documentation of an OS, APIs or SDKs doesn't match the actual behaviour. Every time I get sandbagged with that, I wish I could just read the damn source and see what's really going on.

    Linus is quite right that a spec can be useful as a descriptive abstraction, but not as an absolute or proscriptive definition. When you're sitting there at the keyboard and hit a point where the behaviour differs from the spec, it doesn't matter why the spec is wrong, just that it is. Red pen it and move on.

    --
    If you were blocking sigs, you wouldn't have to read this.
    1. Re:Sounds fair enough to me by shortscruffydave · · Score: 1

      At a conservative estimate, I've pissed away half of my lifetime development effort dealing with instances where the documentation of an OS, APIs or SDKs doesn't match the actual behaviour. Every time I get sandbagged with that, I wish I could just read the damn source and see what's really going on.

      Even if you had access to the source code, you'd still need the documentation for anything more than a trivial component.

      I can think of projects Ive worked on with >1 million lines of code. There's no way I could have homed in on which functions to call (and how) from those big components without some documentation to provide some general guidance. Sure, at times when the documentation was flawed, looking at source = useful, but you need something to point in the right general direction.

      It's all too easy to forget to keep API, etc. specs up-to-date whenever modifications are made to code. That's where the rot starts. Keep the 2 in synch, and it keep the documentation relevant and useful.

    2. Re:Sounds fair enough to me by Anonymous Coward · · Score: 0

      So you write to the source code's definition of what's right, then they fix it, and your app breaks.

      The correct thing to do is write to the spec and work around any bugs in the implementation. Hard to do if there's no spec at all.

    3. Re:Sounds fair enough to me by Grab · · Score: 4, Insightful

      Alternatively, maybe you could wish that the fuckwit coders who gave the thing to you had read the documentation and done a little testing to make sure that it works according to the docs, instead of changing things arbitrarily without telling anyone.

      All that "my code is my design" bollocks is just that - bollocks. I can spend a week reading code to find how stuff actually works, or I can spend a few hours reading the spec that says how it *should* work. My job is *not* debugging someone else's shit code, my job is writing something that uses or interfaces to their code. If they've not done their job properly, why should I be expected to be the one to find the holes, just because they can't be arsed testing it properly?

      Grab.

    4. Re:Sounds fair enough to me by CaptainFork · · Score: 1
      ...the behaviour differs from the spec, it doesn't matter why the spec is wrong, just that it is. Red pen it and move on.

      Maybe the code is wrong. Ever heard of bugs?

      In the absence of specs, bugs are indistinguishable from features. Then people depend on them which is why so many utilities have flags for "enable fix for bug". Enabling the fix by default would break all the people who used the source code as a spec.

    5. Re:Sounds fair enough to me by swillden · · Score: 1

      a spec can be useful as a descriptive abstraction, but not as an absolute or proscriptive definition.

      Oh, I don't, know. I've certainly seen specs that made dandy proscriptive definitions -- meaning that whatever the spec says, you should absolutely NOT do it.

      [ I'm sure you meant prescriptive, but your typo was too funny to pass up ].

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    6. Re:Sounds fair enough to me by Anonymous Coward · · Score: 0
      Sure, at times when the documentation was flawed, looking at source = useful...

      Well, there's your problem! You've been assigning 'source' as 'useful' instead of testing if it's equivellent!

    7. Re:Sounds fair enough to me by Anonymous Coward · · Score: 0

      All that "my code is my design" bollocks is just that - bollocks.

      Best response yet, and totally on the mark. Anyone who has had the "pleasure" of working with (or inheriting code from) some non-communicative idiot, or an Infosys team (same thing), knows exactly why this is a huge problem in real life. In fact, it's a good interviewing topic and a very good way to weed out losers before they get anywhere near your project, or a paycheck.

    8. Re:Sounds fair enough to me by Rogerborg · · Score: 1

      Maybe the fuckwit coders weren't given the docs until after they'd finished. Happens to me all the time.

      --
      If you were blocking sigs, you wouldn't have to read this.
    9. Re:Sounds fair enough to me by Rogerborg · · Score: 1

      Maybe that's true but largely irrelevant. Once a product (OS/library/API) is released and people are using it, whatever it does is a feature. Read The UNIX-HATERS Handbook; the number of users required to fix a featurebug in stone is 5.

      As a user, and absent the ability to change the OS/library, you can either piss and whine about it, or you can figure it out and work around it. Having a spec to hand actively hinders doing the latter, as you waste time trying to figure out why it's behaving incorrectly.

      --
      If you were blocking sigs, you wouldn't have to read this.
    10. Re:Sounds fair enough to me by Rogerborg · · Score: 1

      Specification is documentation but not all documentation is specification. A spec defines what the product should do. You can have documentation that describes what it actually does (think Idiot's Guide), without that being an a priori specification.

      --
      If you were blocking sigs, you wouldn't have to read this.
    11. Re:Sounds fair enough to me by CaptainFork · · Score: 1
      How can having a document to hand actively do anything? It's made of paper! Paper doesn't hinder you unless you slip on it, or put a big pile of it in the way of something.

      Seriously though, if you're famliar with the sources to a library or OS then you already know what the docs say (or should say) and can go straight to the code. But if you are working with something new it is much quicker (I mean orders of magnitude) to go with the spec and then deal with the discrepancies as they arise than to try and deduce everything about how to use it from the code.

      Naturally, when issues do arise, you should pass a detailed bug description back to the vendor/author with an explaination of why the lib doesn't match the spec. To do otherwise is irresponsible.

      Tell me, are you the sort of coder who quietly hacks around issues so you can go home having appeared to have had a productive day? I spend too much of my time tidying up after people like you.

    12. Re:Sounds fair enough to me by Rogerborg · · Score: 1

      Yes, I'm one of the smarter sort of coder. We're both salaried, right?

      --
      If you were blocking sigs, you wouldn't have to read this.
    13. Re:Sounds fair enough to me by CaptainFork · · Score: 1
      It is impossible to assess someone's level of smartness without first understanding what they are trying to acheive.

      But maybe you're right. Perhaps during the day I should go along with the half-assed ways of modern software and take my specs underground, to keep them from being implemented by the wrong hackers. Our day will come.

  24. Remember Linus is a hands-on practical kind of man by xeniten · · Score: 1, Insightful
    A spec whether specific or general, large or small is in some way rooted in theory...Duh. I know. But it's not as obvious as that or this thread wouldn't exist. It seems to me that real hackers, the ones that I have come to respect over the years, simply sat down and built the tools that they needed, at the moment, based on their practical real world at the moment wants and needs. AKA "they scratched their personal itch." They simply had no time for theory.


    Theory, doesn't exist to men like Linus. Or men like Alan Cox either. The root word of "spec" is "speculation". And IMHO if you have to speculate what your needs are, then chances are you probably don't really need it.

       

    --
    Romana: "How did you know?" Doctor Who: "Ah, well, knowing is easy. Everyone does THAT ad nauseum. I just sort of hope"
  25. mod -1 karma whore by Anonymous Coward · · Score: 0

    The whole post copied verbatim from the comments in TFA.

  26. Ammo for the enemy by squoozer · · Score: 2, Insightful

    If nothing else comments like this are ammunition for the people who dislike / want to crush Linux (and OSS in general). While I know from experience that the kernel is a quality piece of software and highly reliable if I was new to Linux and considering moving my company over to it comments like this would scare me. It's not that a spec necessarly improves the quality of the software it just improves confidence that the people writting it have a clue about what they hope to acheive.

    I, too, didn't believe in writting specs when I was in college. Most of the projects I worked on were either loner affairs or the group was very small so communication was good. When I got into the commercial world though it was a very different ball game. After working on a couple of projects that failed horribly because half the team was confused about what it was supposed to be doing I realized that a spec is a very useful tool.

    In my experience the better developers didn't need the spec as much as the poorer developers. The good developers almost understood without words what the other good developers would do in a given situation. The problem was no one could predict what the poorer developers would do in a given situation. This led to large chunks of the system not working / intergrating properly (I freely admit there were other serious management problems on these projecs as well) and needing huge amounts of resources to bring them back on track.

    Later projects where there was a spec (even quite an informal spec) produced a better system in less time with fewer resources. I know this sounds like the same old pap that is dished up to every CS student but it really does work on non-trivial projects.

    I certainly believe that the spec can be taken to far though. I have seen some projects never even get off the ground for the want of a quick hacked together bit of proof of concept code. The secret is in hitting that fine line between anarchy and unanarchy (there is no good single word antonym for anarchy so I propose unanarchy).

    Perhaps the kernel only has uber leet hackers working on it. Somehow I doubt that though.

    --
    I used to have a better sig but it broke.
    1. Re:Ammo for the enemy by Durzel · · Score: 1

      It's not that a spec necessarly improves the quality of the software it just improves confidence that the people writting it have a clue about what they hope to acheive.

      Hit the nail on the head.

      Even if a technical specification doesn't totally reflect the final product, it inspires confidence that the development team behind it followed some sort of structure as well as hopefully demonstrating that the team has a full understanding of how the system works (for post-live support, etc).

    2. Re:Ammo for the enemy by Anonymous Coward · · Score: 0

      I propose 'archy'

  27. Linus Wants You To Hate Him by Dante+Shamest · · Score: 1

    And here's why...

    Wikipedia: "Many Linux fans tend to worship Torvalds as a kind of god. In his book "Just for Fun" he complains that he finds it annoying."
  28. Linux doesn't work on certian problems by putko · · Score: 1

    If you work on programming languages, a formal semantics, whether operational, denotation or what have you are great to have -- you avoid stupid mistakes that folks notice later. E.g. the fact that statements in "C" are not expressions too.

    If you work on a parser/lexer, BNF and regular expressions sure are handy -- but their advantage is that they allow you to specify, precisely and concisely, what you are doing.

    With distributed systems, having a formal model of comuunications between asynchronous processes allows you to SPECIFY how they communicate and formally prove that you don't have certain killer issues: deadlock, livelock, etc.

    So for some problems, specs sure are handy. Anything involving rocket ships or robots that do surgery -- I'd rather have a spec. It would be nice to have a machine-checked proof that critical systems meet the constraints too.

    --
    http://www.thebricktestament.com/the_law/when_to_s tone_your_children/dt21_18a.html
  29. Linus Says No to 'Specs' by Saiyine · · Score: 1


    Linus Says No to 'Specs'

    No 'specs'? But why? They're great machines, they would make great servers!

    Please tell me is not for the RAM. Not for the RAM, please.


    --
    Superb hosting 4800MB Storage, 120GB bandwidth, ssh, $7.95
    Picaday!!! Strange & sexy pictures (Some NSFW!).

    --
    Hosting 20G hd, 1Tb bw! ssh $7.95
  30. Re:Remember Linus is a hands-on practical kind of by Anonymous Coward · · Score: 0

    I get where you're going, but isn't "spec" short for "specification." Maybe it comes from the word "special" or maybe "spectacular"?

  31. Feature creep by Durzel · · Score: 3, Insightful

    Specification documents are the only thing in the company I work for that stops customers asking for functionality in the 11th hour of development, claiming that "they always meant that it would have that" or "I thought I mentioned that at the first meeting".

    As companies go the one I work for is pretty lax with documentation, but they are very careful that all customer requirements are listed iteratively, and - more importantly - signed off on.

    I have been in situations at work where for whatever reason a specification hasn't been drawn up for a customer; its either been left to informal emails or in the worst cases word-of-mouth/notes written in an initial meeting. In my experience these often end up running on past their deadline as the customer requests more and more esoteric functionality, or design and presentation tweaks that covertly require additional functionality, etc.

    As a rule of thumb as a die-hard programmer I hate documentation, particularly detailed technical specifications which constrict my creativity. That said, where it is necessary I absolutely see the need for it - how else can you constrain the customer to what they originally asked for?

  32. Linus doesn't like to talk to people by NXprime · · Score: 0

    Specs are a form of communication. It's important that everyone knows what the other is doing and doing it the same way as everyone else. Appearently he doesn't like that. Linux is really starting to fall apart these days. Enough with all these crappy distro's. Free is great, but if everyone is doing thier own thing instead of making one product better, then it's pointless. http://www.theinquirer.net/?article=26642 Basically with free software, you get a mess instead of a clear focus piece of software. Why? Lack of communication and getting everyone on the same page. That's why linux will never be mainsteam. How many distro's are out there? Too many, that's what. Red Hat, SuSe, and Mandrake. Everyone else can go home. Bye! :)

  33. Antonym by Anonymous Coward · · Score: 0

    Try "hierarchy".

  34. There are specs, and there are specs. by satch89450 · · Score: 5, Insightful

    I once worked on a Standards-writing subcommittee, and ended up being the editor of a proposed standard. I was new to the process at the time. I took the work that was done and completely re-wrote it, from the ground up, according to the published guidelines of the Telecommunications Industry Association (TIA). I then presented my work to the subcommittee.

    "It's too clear. People might actually understand it." I argued that because it was a specification for testing, it should be clear. Yes, I won the argument, but at what cost?

    Over the next few years I watched as more standards were created, edited, published, submitted to the ITU, and eventually turned into Recommendations. When I asked, "what does this section REALLY try to say?" I was told that in order to understand that section I needed to know another piece of the puzzle that wasn't spelled out but was "understood" by "practitioners of the art." In other words, the specification was incomplete...but not according to the rules. I asked why. The answer I got boiled down to one thing: you can't implement the specification without the "stories around the campfire" behind them.

    Put starkly, you can't play unless you join the club.

    Now, in reality, people have taken these less-than-complete specifications and actually made products with them, products that successfully interoperated with those implemented by members of the club. The development time, however, was extended by the need to discover the missing pieces on one's own, or to buy the missing pieces.

    Then there was the story of what eventually became V.80, which I discussed in a Slashdot interview. That particular standard proposal was so bad that I had to vote "no". Again, I ended up rewriting the entire thing so it made sense, and in addition covered not only the corner cases but also future extensions and vendor extensions. It took DAYS to prove that the two versions said technically the same thing (within limits). You could code to mine; the other was almost impossible and "open to interpretation."

    Most specifications (or Standards) are written by partisan participants. It's to their best interests to write these things so that outsiders can't understand them -- be it commercial gain or personal ego. Good spec writing is HARD, and not for beginners. It takes work. It rarely pays anything to write a good specification, especially if the writer views it as a pro-forma task. Just as programmers from several decades ago viewed flow-charting as a useless task.

    Just as people are starting to view Open Source not as a way to lose money but as a way to gain money, perhaps the partisans will see that writing clear, understandable, WORKABLE specifications is in their better interest....or not.

    Given the current state of the art, though, I would tend to agree completely with Linus that specifications, and Standards, that don't provably track with reality deserve not "no", but "HELL NO!"

    1. Re:There are specs, and there are specs. by Captain+Perspicuous · · Score: 1

      So, would you say Linus said "A spec is close to useless" because the specs he was confronted with where some of those "incomplete" specs? I would understand that, it would make sense.

    2. Re:There are specs, and there are specs. by Grab · · Score: 2, Insightful

      But for FOSS projects, we're theoretically dealing with something in which anyone can participate. "Many eyeballs" and all that. This should mean not only that anyone *can* participate, but that anyone should be *able* to. Now if you're going to put some arbitrary restrictions on it - "we won't tell you what you need to know until you've hung out on IRC long enough to join the club" - then you're majorly restricting your eyeball count. :-/

      This isn't a commercial benefit, and it isn't a benefit to the project. The only people it benefits are those people in the club who get a nice warm feeling from their exclusivity.

      Yes, good spec writing *is* hard, and it's the mark of a good software engineer. It worries me that Linus doesn't appreciate specs, because this suggest to me that he is not a good software engineer. A good coder, yes, but coder != engineer. It suggests that not only does he not realise the benefits of a good spec, but also that he possibly would not be capable of writing one. And that's a pretty sad situation.

      Grab.

  35. Fine for non-commerical projects by The+Mutant · · Score: 2, Insightful

    But for any type of commercial undertaking, specs are an essential part of the development process.

    Without a spec you won't know what you're being asked to build, or will find it difficult to get customer agreement that what you're delivering meets their need.

    Without a spec you can't estimate, and without accurate estimates you can't insure that you're properly getting paid.

  36. Not surprising by ilitirit · · Score: 1

    This shouldn't really surprise anyone. His opinion is reflective his "hacker" roots, and of the care-free attitude of the Linux movement.

    This is a program for hackers by a hacker
    - Linus Torvalds

  37. Communication to Whom? by deeny · · Score: 3, Informative

    There's a wonderful bit about specs from Jason Fried here. Pretty similar in viewpoint, I think.

    1. Re:Communication to Whom? by Bamafan77 · · Score: 1
      I'm thinking it's a matter of semantics. In the parent's linked article, Jason Fried first goes on about how functional specs are bad. But then he says a one page story is OK, along with some basic UI drawings. Now I would consider this a functional spec. A functional spec is anything on paper that gets everyone thinking along the same lines. It doesn't have to be this huge, bloated monstrosity with useless information. I suspect Linus is referring to the same thing.

      I'm afraid that people are going to read these comments and assume nothing needs to be written down which is going to cause a lot of projects to go up in flames.

  38. POSIX, Common Lisp, R5RS by RAMMS+EIN · · Score: 2, Insightful

    I'd say that there are good specs as well. A few examples:

    POSIX standardizes programming interfaces for operating systems. It allows easy portability of applications between operating systems, and it's very successful at that. Although non-compliant operating systems (such an Windows) and non-compliant applications (many applications written for the GNU system, and any application that uses functionality not standardized by POSIX) cloud the picture somewhat, POSIX has worked wonders for application portability.

    Common Lisp is a standardization of features found in Lisp systems. It mixed and matched parts from various more or less specialized Lisp systems, and built a generic programming language that is still widely regarded as the best programming language by those who know it. The fact that the language is standardized to a great extent allows code to be easily ported from one implementation to another.

    R5RS is the current state of the standardization effort for the programming language Scheme. Contrary to POSIX and Common Lisp, it aims to standardize not as much as possible, but rather a small common core which can then be extended. This makes Scheme a very useful object for programming language research.

    Comparing these specifications to the alternative of having no specification, I'd have to say they provide definitive advantages. Without POSIX, we'd still be stuck with operating systems having APIs different enough that it might be easier to rewrite applications for each OS, rather than maintain a single codebase with a few platfrom-specifics here and there. Language specifications like Common Lisp and R5RS have enabled a whole slew of implementations, each filling a specific niche, where other languages are often stuck with one implementation, and perhaps a few not-quite-compatible alternatives; and if you want a different niche, you'll have to use a different language.

    --
    Please correct me if I got my facts wrong.
  39. I agree by cheekyboy · · Score: 4, Insightful

    Its an idiot who says a spec is useless. Perhaps a 400 page IBM corporate spec on a filesystem is useless, but 20-40page specs are not.

    Hashing out a spec at least shows you what can be possible and what cannot, and while doing it, you may
    see possibilities of new features or addons and also you might realise that feature X will take damn ages.
    It also shows you that feature Z might ruin your whole design or be nothing more than a timewasting experiment.

    There are different levels of spec design, but im not saying, go make it ultra low level. Jeez Linus, even doing a rough
    diagram of a gui or this process does step 1 thru 12. At least the other developers on the team can see what in hell
    your are going to make. Not just some 1 liner, "we're gona make a kick-ass 64bit indexed image engine/database"

    How about a 200 thread level async dns resolver? Oh yeah all in your head Linus.

    Heres my product spec for a better IDE in 1 line.
    Support basic html inside /* comments, so its damn easier to read and visually see, 100% ascii blows
    man. Even support IMG tags so your can BUILD in documentation thats usefull in your source.

    High level specs, yes, lowlevel specs that are 5x larger than source codes, NO.

    --
    Liberty freedom are no1, not dicks in suits.
    1. Re:I agree by Itchy+Rich · · Score: 1

      Its an idiot who says a spec is useless.

      I agree, but would say that a group of people who say specs are useless could be devided into more categories; the idiots, the ill-informed, the misquoted...

      I don't know what Linus's experience of working in software houses is like, but I find there's usually a mix of talent and experience levels, with some developers tending to need things to be designed by a more senior team member. Linux kernel development is a very different environment and I'm not qualified to comment on how the process works, but in the regular world I've seen the benefits of a good spec, and no number of celebrity kernel developers could convince me otherwise.

    2. Re:I agree by Viol8 · · Score: 2, Insightful

      "Support basic html inside /* comments, so its damn easier to read and visually see, 100% ascii blows man"

      You've gotta be fscking kidding! Code and comments can be hard enough to
      understand at the best of times , without some coder shoving blink
      tags, bold , tables and god knows what else all through some C++ code.
      And what happens if those code comments are read by another IDE/editor
      later on that doesn't support HTML?? Is someone supposed to wade through
      the HTML by eye?? Get a fscking clue...

    3. Re:I agree by Anonymous Coward · · Score: 0

      The worst part is in the corporate world PHB's would think these suggestions are great.

    4. Re:I agree by GlassHeart · · Score: 2, Interesting

      HTML text formatting tags don't add very much to code comments, but there are many times I wished there was a good way to include even a simple drawing. A function may implement a state machine, and the easiest way to describe a state machine is frequently a state transition diagram. In some other cases, a table that I don't have to format by hand would also have been wonderful.

  40. Re:Remember Linus is a hands-on practical kind of by Anonymous Coward · · Score: 0
    The root word of "spec" is "speculation".
    er, isn't 'spec' from 'specification'? just a thought...
  41. Joel Spolsky by diepan · · Score: 3, Informative

    Joel Spolsky certainly disagrees. And not just in theory.

    1. Re:Joel Spolsky by christophe.vg · · Score: 2, Informative

      It seems that Joel actually agrees...

      Linus states "In other words, it's a way to _talk_ about things, not to implement them."

      Joel states "[..] when you design your product in a human language, it only takes a few minutes to try thinking about several possibilities, revising, and improving your design. [...] So that's giant reason number one to write a spec. Giant reason number two is to save time communicating."

  42. Specs or Specs? by miffo.swe · · Score: 1

    I think there is a difference between how specs work. One type tells you how things should be implemented while the other type tells you how things should work. Linus was probably referring to the type that tells you how you should implement things but nothing about how it should work IRL. The worst software i use is always done by some big megacorporation and im pretty sure there are tons of specs on that software. I think its pretty easy to mistake specs in implementations of one piece of software for specs in interacting between applications.

    I also think its important to take his words for what they are, an expression of what he thinks himself, not what he thinks everybody else should think. If you dont agree, well then dont or provide a very good reason for him to change his mind.

    --
    HTTP/1.1 400
  43. If they're good enough for the Space Shuttle... by Stone+Rhino · · Score: 5, Interesting
    Reading this article brought to mind another one I saw mentioned on slashdot a while back, about the team that writes the code for the space shuttle's computers. They write what's considered to be the finest code in the world, which essential for running a rocket ship weighing several million pounds and moving at several thousand miles per hour. How do they do it? Specs, lots of specs. According to the article...

    At the on-board shuttle group, about one-third of the process of writing software happens before anyone writes a line of code. NASA and the Lockheed Martin group agree in the most minute detail about everything the new code is supposed to do -- and they commit that understanding to paper, with the kind of specificity and precision usually found in blueprints. Nothing in the specs is changed without agreement and understanding from both sides. And no coder changes a single line of code without specs carefully outlining the change. Take the upgrade of the software to permit the shuttle to navigate with Global Positioning Satellites, a change that involves just 1.5% of the program, or 6,366 lines of code. The specs for that one change run 2,500 pages, a volume thicker than a phone book. The specs for the current program fill 30 volumes and run 40,000 pages.


    Predictable code is good code. You want your code to do x when y happens, and everyone who relies on your code should know what to expect from your code under every circumstance. Kernels are supposed to be boring.

    Specs may suck in some cases; if they do, they're badly written. It's an indictment of the person who wrote that spec, not the concept of specs in general. When I call a function, I expect it to do exactly what its documentation says, and it should comply with the documentation exactly.

    I shouldn't have to read the code just to use it. That defeats the entire purpose of segmenting things out into separate pieces. You might as well be using gotos to write your spaghetti code.
    --


    Remember, there were no nuclear weapons before women were allowed to vote.
    1. Re:If they're good enough for the Space Shuttle... by fuzzybunny · · Score: 1
      There's a reason for this. Same with medical devices--you want something to behave in a predictable, reproducible manner, otherwise someone dies.


      This means an enormous amount of overhead for project management, code analysis, documentation, testing, QA, reviews of testing, reviews of documentation, signoffs, etc etc etc.


      It's not adventurous or fun, it doesn't remove 100% of problems, but it makes it easier when religiously followed to find where issues come from and how to fix them.

      --
      Cole's Law: Thinly sliced cabbage
    2. Re:If they're good enough for the Space Shuttle... by TarikJax · · Score: 1

      Predictable code is good code Absolutely. Linus Torvalds may know the kernel inside out but if I want to write software for Linux will I need to develop the same level of understanding? Moreover, without agreed specs, what stops someone from changing some kernel code and breaking the behaviour that my app relies on?

    3. Re:If they're good enough for the Space Shuttle... by gbjbaanb · · Score: 2, Insightful

      It's not adventurous or fun

      And that's the root of the issue. Linus (like many geek coders) doesn't like namby-pamby stuff like specifications, requirements and documentation. None of that is fun, so getting rid of it as much as possible is a driving force for these kind of guys.

      I don't like the paperwork that goes with my fun day job of coding, but I have to do it, and it is necessary. Just ask the guys I hand my releases off to for a very valid reason why the paperwork is necessary.

    4. Re:If they're good enough for the Space Shuttle... by Salamander · · Score: 1
      Specs may suck in some cases; if they do, they're badly written. It's an indictment of the person who wrote that spec, not the concept of specs in general. When I call a function, I expect it to do exactly what its documentation says, and it should comply with the documentation exactly.

      Thank you. Your expectation will of course not be met much of the time, but...well, what you said. That's an indictment of that particular spec's authors (or coders who diverged from the spec without updating it) not of specs in general.

      On a related note, some will probably argue that such an approach might be fine for flight control or medical instruments, but doesn't apply to something like Linux. That's bullshit. It might be true that Linux doesn't need phone-book-size specs for minor changes, but if something is good for the most demanding kinds of applications a responsible programmer might naturally wonder what subset (or variant) of that process might still be useful for something less demanding. The answer is almost certainly not 100% but it's just as certainly not 0% either. Rejecting something in its entirety because the two problem domains are not completely identical is just sloppy. Maybe Linus and his chief lieutenants can't write a useful spec, but that doesn't mean nobody can.

      --
      Slashdot - News for Herds. Stuff that Splatters.
    5. Re:If they're good enough for the Space Shuttle... by Anonymous Coward · · Score: 1, Insightful

      Bad analogy. Safety is the major consideration in this example. If we wrote our business software the same way, it would cost a few million dollars instead of a few hundred. Similarly, if NASA wrote its software the way we do, it would be much cheaper, but things would blow up on occasion....

    6. Re:If they're good enough for the Space Shuttle... by dodobh · · Score: 1

      Yeah. But the shuttle is a rather simplistic system. Now if you were dealing with a multitasking, multiuser system which would also run on extremely different kinds of (possibly flaky) hardware, be modular, and still be reliable to that extent, I would be impressed.

      Oh, and it needs to be cheap too.

      --
      I can throw myself at the ground, and miss.
    7. Re:If they're good enough for the Space Shuttle... by Compholio · · Score: 2, Interesting

      Maybe Linus and his chief lieutenants can't write a useful spec, but that doesn't mean nobody can.

      Linus and friends write documentation, not specs. Specs tell you how a program "should" work and tend to be full of BS unless they're at very high level, documentation tells you how a program "does" work. I imagine that Linus and friends are more interested in telling you how it does work than how it should work, and I tend to agree with that perspective.

    8. Re:If they're good enough for the Space Shuttle... by Salamander · · Score: 1
      Linus and friends write documentation

      Rarely.

      Specs tell you how a program "should" work and tend to be full of BS unless they're at very high level, documentation tells you how a program "does" work.

      First, learn that quotes aren't for emphasis. Second, you're making a totally bogus distinction between specs and documentation. Something that describes how a component or subsystem works is still a spec even if it's written retroactively. Ideally, how something should work at an earlier point in time is how it does work at a later point, so a good spec can cover both.

      --
      Slashdot - News for Herds. Stuff that Splatters.
    9. Re:If they're good enough for the Space Shuttle... by heson · · Score: 1

      Im looking forward to their release of a free comparable kernel, some time around the next milennia.

    10. Re:If they're good enough for the Space Shuttle... by Anonymous Coward · · Score: 0

      Take the upgrade of the software to permit the shuttle to navigate with Global Positioning Satellites, a change that involves just 1.5% of the program, or 6,366 lines of code. The specs for that one change run 2,500 pages, a volume thicker than a phone book.

      Because everyone knows that 2500 pages of spec are easier to read and understand than 100 pages of code.

    11. Re:If they're good enough for the Space Shuttle... by dswan69 · · Score: 1

      If you need to know exactly how that section of code behaves and interacts with the rest of the system, then the documentation, huge as it may be, is more useful than trying to decipher the code.

    12. Re:If they're good enough for the Space Shuttle... by Anonymous Coward · · Score: 0

      Amen. Linus, bless him, is clearly not a professional and has never actually had to write a piece of code to do what *someone else* expects it to do. Otherwise he'd be painfully aware of the requirement for specs. Sure you may finish your unspecced project and sure it may be fantastic, bullet proof, hot code but when you leave the job and hand it on to someone else... or even when a new person starts using the program and doesn't know how it's supposed to work.. uh-oh (PS. "uh-oh" is pretty much my entire job description these days - I spend most of my time wading through un-specced, undocumented code trying to answer users' questions about what their software does. And believe it or not, writing up the specs retroactively. Thanks a million, all you code cowboys who came in to the office for a few months and then ran off without leaving a note) Oh no, I think I'm about to start ranting and raving about the utter lack of professionalism and craftsmanship among these young whippersnapper programmers again..

    13. Re:If they're good enough for the Space Shuttle... by Coryoth · · Score: 1

      Bad analogy. Safety is the major consideration in this example. If we wrote our business software the same way, it would cost a few million dollars instead of a few hundred.

      Sure, but there's a sliding scale and just because going to the level of formality that Lockheed-Martin do over the shuttle would be too expensive, that doesn't mean it isn't worth doing anything at all. Hell, Linux is formally specified to some degree. It is in C, which means it uses static types, which means the type signatures for functions are formally specified (and statically checked!). Specifying a little bit more about the function (like, perhaps, some more specific requirements of input parameters than just the type and constraints on the return value other than just its type), particularly if you only do so for more critical functions, is hardly vastly more work costing many orders of magnitude more to produce, but it does offer you more options for static (and runtime!) checking and hence greater assurance. Use as much as you need, but don't pretend that its useless.

      I wouldn't go to the same trouble in terms of specifications and plans to slap together a doghouse as I would to build my own home. I would expect someone building a skyscraper to go to more trouble again. The same applies to software.

      Jedidiah.

    14. Re:If they're good enough for the Space Shuttle... by Dave21212 · · Score: 1


      I wouldn't go to the same trouble in terms of specifications and plans to slap together a doghouse as I would to build my own home. I would expect someone building a skyscraper to go to more trouble again. The same applies to software.

      But really, why bother with *any* specifications - after all, God will just re-arrange the code through Uncaused Force (per you sig) and make it run well if you are a good person. And using the specs for determining the cause of any bugs is useless, I mean, if you can't determine why a bug is happening, then obviously it's because God wants the bug to happen ;)

      I'm personally more apt to believe the FSM theory.

      --
      "Whoever would overthrow the liberty of a nation must begin by subduing the freeness of speech."--Benjamin Franklin
    15. Re:If they're good enough for the Space Shuttle... by GileadGreene · · Score: 1

      I realize that you're kidding around. But I wanted to point out that the existence of a "bug" presupposes some kind of "specification" which delineates what the "correct" behavior of a program is. With no definition of correctness (either explicitly on paper, or implicitly in your head) there is no way to recognize "incorrect" behavior, aka bugs.

    16. Re:If they're good enough for the Space Shuttle... by Coryoth · · Score: 1

      You do realise "Uncaused Force" is a parody right?

    17. Re:If they're good enough for the Space Shuttle... by Dave21212 · · Score: 1


      I wasn't totally sure, but hey, I just can't help working in an FSM reference...

      I have a family member who thinks the whole ID thing is a big step in the right direction, so I perk up a bit when I see material on the subject... I should have included some smilies ;)

      Ironically, I think your essay, while in jest, almost exactly captures the ID "argument" - don't be surprised if you see the (terrorist) Pat Robertson use it as another example of "scientists" supporting the theory !

      And just to stay ever so slightly on topic, do you suppose God could write up a requirements specification so convoluted that even he couldn't implement it ???

      --
      "Whoever would overthrow the liberty of a nation must begin by subduing the freeness of speech."--Benjamin Franklin
    18. Re:If they're good enough for the Space Shuttle... by Coryoth · · Score: 1

      Ironically, I think your essay, while in jest, almost exactly captures the ID "argument" - don't be surprised if you see the (terrorist) Pat Robertson use it as another example of "scientists" supporting the theory !

      Well that was very much what I was going for. While I appreciate things like FSM I felt they failed to adequately communicate with fence sitters or people leaning toward ID. The response is "but that's just stupid" and they ignore it. The principle of "Uncaused Force" was to hew as closely as possible to ID style arguments, sounding as plausible as ID, yet using the same argument form (which is where the flaw really lies) to conclude something ridiculous (that gravity is false). If people actually try to use the piece seriously... I think that will do more to discredit them in the long term, so I'm not really concerned.

      Jedidiah.

    19. Re:If they're good enough for the Space Shuttle... by dmccarty · · Score: 1

      Hmmm...interesting that the GPS upgrade is about 1.5% of the program, but the documentation for the upgrade is four times that amount (6.25%) in percentage of the total documentation.

      --
      Have fun: Join D.N.A. (National Dyslexics Association)
  44. NASA SEL by weilawei · · Score: 1

    NASA is extremely specification oriented in its programming tasks. The SEL maintains a website with online documentation on their process.

    Specifications are useful when the "theory" is down and the execution must match. Examples are anything aerospace, underwater (read: submarines), nuclear reactors. For OS development, this would stifle it by never being able to respond to a changing environment.

  45. Well thats how it is by Anonymous Coward · · Score: 0

    Thinking Theory > Reality is what seperates programmers from computer science degrees.

  46. Linus Says No to 'Specs' by Muhammar · · Score: 1

    The headline fooled me. At first, I though he was going to a re-hab or something

    --
    I doubt that we will ever figure out - and I suspect that even if we did figure out we couldn't do much about it
  47. Proof of the pudding and all that by nagora · · Score: 3, Insightful
    Given how many commercial, fully spec'ed projects fail or are not even delivered, or are delivered late and over budget, is there really that much evidence that anyone knows how to write complex software at all?

    Maybe "what works" is the best approach, especially for an open-ended project like Linux.

    TWW

    --
    "Encyclopedia" is to "Wikipedia" what "Library" is to "Some people at a bus stop"
  48. We don't need specs by BlueTrin · · Score: 1

    Highly detailled specs: Specs

    FAQ: FAQ

    Support: Support

    How to reply on Slashdot: Here

    I don't understand why people still say that Linux is not user-friendly. Complaints

    --
    Don't you know it is now both immoral and criminal to think beyond the next quarterly report?
  49. What does this mean for Linux? by houghi · · Score: 1

    Is it just a discusion that is going on? If so, what is the relevance of one member of the discusion. You could also state that somebody says YES to 'Specs'.

    What is more interesting is to know how much influence Linus has on Linux. If everybody is for and he is agains, does he stop things? If that is the case, then how open is Linux really?

    If that is not the case and Linus is just a member in the discusion, what is the relevance if the discusion has not yet been terminated.

    --
    Don't fight for your country, if your country does not fight for you.
  50. A Spec Should Define the Test by the_lesser_gatsby · · Score: 2, Insightful

    A spec should be used to write the acceptance tests for the application (and indeed a lot of the unit tests). Documents just sit there and don't tell you when something's wrong - repeatable tests do.

    A specificiation should specify how a program behaves to the external world, not how it should be implemented.

    So I think I kind of agree with Linus.

  51. specs by Anonymous Coward · · Score: 0

    I hate specs. At the company where I work, specs have become the law for just about everything. They are usually not completely appropriate for specific examples but have to followed to every dotted i and crossed t. Specs remove all sense of control/ownership, turn a project/challenge from being fun to work on to being a slave monkey following some spec. If project fails but spec is followed, no harm. If project fails and spec is not followed, you're gone. If project is successful and spec not followed, you're not gone but in trouble. If project successful and spec followed, all good. Problem this creates is attitude that stifles innovation, adding too many downsides to taking any risk that deviates what might have worked before or what is theoretically possible.

    I understand a need for specs for some general processes/information, but it can easily go overboard by insecure management.

  52. I'm shocked by rexguo · · Score: 1

    Frankly, I'm shocked. I've been coding for more than 20 years. The idea of having specifications becomes more important by the day. Yes implementation and the specs may differ over time, that's why you need to re-visit the specs regularly. It's a waterfall model, like it's taught in schools. If implementation and specs differ, find out why, record it, update the specs. It's all due diligence and part of a rigorous and professional process. That said, many inexperienced engineers don't know how to write a good specs and it's nobody's fault: it's a learned skill. Plus it is even harder for engineers because many of them don't have good writing skills to begin with!

    --
    www.rexguo.com - Technologist + Designer
    1. Re:I'm shocked by Patrik_AKA_RedX · · Score: 1

      I agree. I don't understand what Linus' issue with specs is. Anyone can decide how detailed his specs have to be, nobody says you have to write out every aspect of your project down to the smallest detail. IMO at least document your interfaces (on every level that you could expect someone to (re)use your code or software), the implementation is your own problem, but the interfaces are the problem of everyone who has to work with your code afterwards. You just can't rely on reading the code as only documented interfaces can be seen as somewhat static (and even that depends on how well the writer understands what exactly he's building).

  53. Why kernels always need specifications... by MosesJones · · Score: 2, Interesting


    I'd hoped that Linus was refering to "SPECmarks" et al as a bad basis for writing a kernel, but specifications are way off base as being a bad idea for any area of software let alone a kernel.

    Sure BAD specifications are a bad idea, but so is bad code.

    Its also not true to say that a specification can't be detailed and accurate and then implemented directly, IPv4 is a pretty clear specification that I'd be worried if the kernel writers had ignored when they wrote their IP stack.

    I too have seen dreadful code written directly from specifications, normally because there was no design, but I've seen much worse code written from the basis of "I think this therefore it must be right".

    I'm normally a big fan of Linus, but given that many of the major areas of Linux and Open Software are written against specifications (X, Samba, IPv4, 802.11x, BIOS etc etc) its hard to see where Linus is coming from. If two organisations or technologies want to communicate they need an agreed standard and specification on the inter-operation. Any other approach is just lobbing packets and hoping for the best.

    --
    An Eye for an Eye will make the whole world blind - Gandhi
  54. Matches my experience by Anonymous Coward · · Score: 0

    Whenever I write something to specs, I wind up rewriting it anyway when I have to interface to the software written by the people who wrote the spec. They seem to think that if they wrote it, they can break it (this is government and govt contractors here).

    These days I just file the specs away, wait until they get done developing, get sample files/test server access, and write fresh code based on reality, not spec fantasy.

  55. Too many fallacies by Jekler · · Score: 1

    There's so many fallacies in Linus's assertion. He even mixes no less than four fallacies in the same sentence.

    "I have _never_ seen a spec that was both big enough to be useful _and_ accurate."

    First, he sets himself up for perfect justification by clarifying that he has never seen such a spec. Therefore if you argued that you've seen such a spec, he can still argue that he hasn't seen one. In the same sentence, he also puts forth the idea of a spec being both big enough to be useful and accurate. So if you showed him an accurate spec, he'd just claim it wasn't big enough to be useful.

    There's also some ad hoc fallacy mixed in his argument. For example, by saying it's the single worst way to write software, if you showed him a worse method of writing software, he'd just claim "that's not really writing software", to maintain his argument.

    And his entire assertion is coated in the fallacy of familiarity. He asserts that because, from his relative point of view, he has never judged a spec to be worthwhile, there must not exist any worthwhile specs.

    Of course the fact that his entire argument is supported by fallacies doesn't make his conclusion wrong. But, as others have pointed out, there are plenty of examples of successful specifications which patently disprove him.

    I shudder to think that Linus never wrote any specifications for Linux. Did he just open up a compiler and start typing? I can't even imagine he'd lower himself to use a compiler that was developed around (and hence tainted by) those damn language specs. How did he develop drivers to interact with the hardware without any specifications? Did he just guess at what they needed, shifting bits around one at a time until the network card responded?

    Without a spec, what would a software engineer do at a company? He gets hired, sits down at a desk and and the boss says "We're writing tax management software." and the engineer asks "Any spec I can look at to get started? What component are we working on right now?" and the boss says "We don't use specs here, that's the single worst way to write software. I'm sure you'll figure out what to do."

    Without specifications, the web wouldn't exist. You couldn't have web developers because you couldn't tell them where to look to learn how to build a web site. You just tell them to type and sooner or later something will happen. What if you didn't even specify what file extension to give a page? They'd just have to keep saving files guessing at extensions until they haphazardly got something to work.

    [sarcasm]A world without specifications sounds like a real gem of a place to develop software in.[/sarcasm]

    1. Re:Too many fallacies by CaptainFork · · Score: 1
      I shudder to think that Linus never wrote any specifications for Linux. Did he just open up a compiler and start typing?

      Yes, but only after spending years studying the source code for various existing UNIX systems. He learned how to write a UNIX-style OS this way. In a sense those sources were his specs. He no more knows how UNIX actually got designed than a tea leaf knows the history of the east india company.

      I can't even imagine he'd lower himself to use a compiler that was developed around (and hence tainted by) those damn language specs.

      GCC is filled with hacks for compiling Linux and other programs. Each time it was eg a 5-line change in GCC vs a 10-line change in the program itself. The shorter change generally wins and now "man gcc" takes 24 seconds CPU time on a 2GHz Pentium 3. (it's big enough, so presumably not accurate, according to Linus).

      How did he develop drivers to interact with the hardware without any specifications?

      They reverse engineer Windows drivers. There's zero chance of a Linux driver being faster or more reliable or performing better, because instead of determining how the hardware works and then how to drive that hardware, they simply take the driver piecemeal (retyping the code so it can be GPL'd).

      Did he just guess at what they needed, shifting bits around one at a time until the network card responded?

      That's what I would expect to happen if there wasn't a precident whose design could be borrowed. Right now I can't think of any examples of drivers (or any software) that have been written that way and been successfully finished. By Linus' logic that means there aren't any, nor will there ever be.

  56. Good thing he wasn't on Apollo by Call+Me+Black+Cloud · · Score: 1


    "Yeah guys, what's the point of specs? They're theory, not reality. So go ahead and climb in the capsule and let's see just how far you get."

    It's clear he doesn't work in the consulting/contracting world either. The government agency for which I work (as a contractor) has a very real need for the software we right to meet certain specifications. And we're not even working on real-time systems. Can you imagine that attitude on the team working on fighter jet flight control software?

    1. Re:Good thing he wasn't on Apollo by Farmer+Tim · · Score: 1

      Considering what happened to Apollo 1, which was built to spec, this is possibly not the best example.

      --
      Blank until /. makes another boneheaded UI decision.
  57. Where is CFML specs? by twinchang · · Score: 1

    If you work on programming languages, a formal semantics, whether operational, denotation or what have you are great to have -- you avoid stupid mistakes that folks notice later. E.g. the fact that statements in "C" are not expressions too.

    If you work on a parser/lexer, BNF and regular expressions sure are handy -- but their advantage is that they allow you to specify, precisely and concisely, what you are doing.


    In talking about language specs, does anyone know where I can find a ColdFusion Markup Language (CFML) specs/syntax rule? It's seems that there are no formal definition for what characters should/shouldn't appear in the attribute part of a coldfusion tags.
    1. Re:Where is CFML specs? by putko · · Score: 1

      Indeed. It looks like there is no formal specification. So you are fucked. That's what's good about specifications; either the program is bad or the spec is bad, but at least you know where to point.

      It seems they provide a syntax checker -- this is a program that supposedly tells if your program is kosher or not.

      But then again, given that there isn't a spec, what do you do when there are differences between what the checker accepts and what the interpreter accepts? Hmmmmm. I guess you rip your hair out.

      When you use a program like this to define what is allowed, you essentially say, "whatever is good is whatever this program accepts. It is what it is. Have a nice day, biatch!" It is the road to hell.

      Here's the checker: http://livedocs.macromedia.com/coldfusion/5.0/Deve loping_ColdFusion_Applications/debugError3.htm

      Good luck!

      --
      http://www.thebricktestament.com/the_law/when_to_s tone_your_children/dt21_18a.html
  58. I Have to Say I Agree by obender · · Score: 1
    Before it can be used any knowledge from any document must enter someone's mind. The spec in the mind its not the same as the one in the document. They might be similar but not identical. The same applies for the person writing the spec: he is limited in what he can express and sometimes his perception of reality is wrong.

    All this approximations add up and so often we look at a spec only to wonder if it has anything to do with reality. In the end what gets done has more to do with the general technical culture of the implementors than the exact wording of the spec.

    I think that most of the specifications for protocols are actually documenting the way the code prototypes work rather than constitute the base these prototypes.

  59. English language spec? by mjh · · Score: 2, Interesting

    To a certain extent, specs define the parameters around communication. That's why interoperability works: conform with the spec and you can communicate... except when you can't because the spec was built but never implemented, and the spec designers introduced bugs that they would have caught if they'd tried to implement it. Or maybe the spec designers had a specific idea of how things were going to be and didn't anticipate a particular application and it's needs.

    If you accept the premise that specs enable communication, I would ask you this: where is the spec for English? And wherein does it describe things like "fo-shizzle" and "off the hizzle"? Or any other dynamic aspect of language that shows up everywhere in the world. Many people communicate without having a written spec for how that communication is going to work. More over, "fo-shizzle" (et al) is well understood by many people outside of the culture that created it despite it's never having been incorporated into an English language spec. Defining a spec for English is really pointless. The language changes and develops for the specific needs of the people using it.

    It strikes me that the same is true with technology specs. If you don't define them, people will make incremental improvements to stuff without having to worry about hearing, "Hey! That's out of spec!" Put another way, specs are the antithesis of incremental change by individuals who need those changes. Specs are cathedral, not bazaar.

    Are there spec success stories? Sure: IP. On the other hand how long have we been trying to get greater acceptance of IP6? And why do we want IP6 at all? Because no one is willing to incrementally change IP4.

    Put another way: specs are a form of governance. They're the central group saying "thou shalt". That's fine if (and only if) that central group knows every possible implication of every decision that they make. Linus seems to be trying to avoid that. He seems to have faith that a diverse group of people will do a better job of figuring out what works best over time than he alone, or this particular set of kernel devs, could devise today.

    Of course, I could be wrong.

    --
    Key to financial independence: Spend less than you earn. Save and invest the difference. Do it for a long time.
    1. Re:English language spec? by Anonymous Coward · · Score: 0

      The spec for english? I believe its called grammar. sounds like you went to the same type of public school as me not really learning the specs of english well but i at least understand there are some. I bet if you look at grammer books from 100 years ago they would be differnt from the ones now due to changes in the way english is, such as american color VS england colour.

      I wouldn't imagine how daunting atask it would be to keep updating the specs on a kernal you are changing everyday, but are you saying that the finished versions of kernals have no specs?

  60. Send him a spec by AnonymousYellowBelly · · Score: 1

    Maybe we should draft a spec on "how to write a useful spec" and send it to Linus...

    --
    Disclosure: I'm stupid
  61. He's confused by Anonymous Coward · · Score: 0

    He probably intermixed two things: Having an initial spec and adapting the spec to changes.
    Changes may be triggered in the review process of a spec and while implementing a reference implementation.

    If the changes in this phase are big, you're spec was lousy. Plain and simple.
    Another thing: It is *hard* to produce a good, ambiguity-free spec.
    And of course, once you have a reference implementation, you don't need a spec. The code is the spec.

  62. Read the *entire* thread please! by Anonymous Coward · · Score: 1, Informative

    Don't just read the summary at kerneltrap, but read the *entire* thread to get the full story.
    Lots of the participants in the thread have a lot of history on LKML and the summary given by kerneltrap doesn't show this. Also a lot of points are made in other posts in the thread that give background to the way Linus answers.
    If you don't take the time to read the entire thread, then you are not getting the full story and you are most likely to misunderstand the issue(s).

  63. True... by kitsook · · Score: 1

    Specs are "useless" to an individual developer... but "spec" is an efficient way to communicate with your users and other developers... in case u need to.

  64. Linus has limited engineering future vision by Morgaine · · Score: 5, Insightful

    "software was written to match theory, not reality"

    That was very blinkered and unfortunate statement by Linus. While he portrays himself as a "practical engineer", the truth is that he is not flying the flag of professional engineering, but supporting some kind of ill-conceived ideal of ad hoc amateurism.

    The world of computing is in crisis. After 40 years of 'pro' development, computing is still a human-driven craft instead of the extremely precise arm of engineering that it could so easily have become through its well-defined subject matter.

    While Linus has contributed immensely to the world by delivering a wonderful engineering tool as well as a great end-user product, he is also extending the software crisis through unfortunate remarks like that one. The "reality" which he so seems to praise is THE PROBLEM in software engineering, and not something to be endorsed or supported.

    If the world continued along Linus's desired path of "reality" vs theory, the current mess will know no end, and the metaphorical bridges of computer science will still be falling down in the year 3,000.

    Mankind's future in computing must build on immoveable foundations of theory and logic if it is to progress into a realm where machines of IQs in the millions work at our behest. Advocating some sort of ad hoc "practical" computing barbarism is very short-sighted, dangerous, and regressive.

    --
    "The question of whether machines can think is no more interesting than [] whether submarines can swim" - Dijkstra
    1. Re:Linus has limited engineering future vision by nihilogos · · Score: 2, Insightful

      Mankind's future in computing must build on immoveable foundations of theory and logic

      Bertrand Russel tried to put mathematics on an immovable foundation of theory and logic, sadly it turned out to be impossible. Some people still don't realize this.

      --
      :wq
    2. Re:Linus has limited engineering future vision by indifferent+children · · Score: 3, Insightful
      computing is still a human-driven craft instead of the extremely precise arm of engineering that it could so easily have become

      I agree with Linus. And the problem that I see is people like you who insist that the above statement is true, all evidence to the contrary. No company has ever demonstrated a methodology that is guaranteed (or even very likely) to deliver high quality, maintainable software in a predictable amount of time. Software development is still an art, and may always be one.

      --
      Censorship is telling a man he can't have a steak just because a baby can't chew it. --Mark Twain
    3. Re:Linus has limited engineering future vision by JohnFluxx · · Score: 1

      Really? Where did it fail? Mathematics can't be completely based on theory and logic??

    4. Re:Linus has limited engineering future vision by hublan · · Score: 2, Informative

      Really? Where did it fail?

      Approximately here.

      --
      My spoon is too big.
    5. Re:Linus has limited engineering future vision by arkanes · · Score: 1

      I find that people who say this not only tend to have absolutely abysmal softare development skills, but they also tend to have incredibly inflated views of the "perfection" of engineering. You can start telling me about "real engineering" and about all your theoretical base and your guild rings when the door to my house stops sticking when it rains.

    6. Re:Linus has limited engineering future vision by Morgaine · · Score: 1

      Be sure to read the section "Misconceptions about Gödel's theorems" and the subsequent discussion.

      Anti-logic advocates frequently cite Godel as implying that logic is irrelevant and pointless, usually as a precursor to getting their own unfounded opinions considered without any hard sanity checks. It's pretty sad.

      Mankind progresses by axiomatizing lower level concepts and virtualizing higher-level ones for discussion, and this works for mathematics as well. As a result, Godel and Russell constrain our mathematics and logic (and scientific progress) about as much as the Halting Problem constrains computing.

      Ie. not at all for the practice of science-based engineering, and for the theorists it's just another interesting constraint to add. The sky is not falling.

      --
      "The question of whether machines can think is no more interesting than [] whether submarines can swim" - Dijkstra
    7. Re:Linus has limited engineering future vision by amightywind · · Score: 1

      Mankind's future in computing must build on immoveable foundations of theory and logic if it is to progress into a realm where machines of IQs in the millions work at our behest. Advocating some sort of ad hoc "practical" computing barbarism is very short-sighted, dangerous, and regressive.

      Too bad there are no such foundation

      --
      an ill wind that blows no good
    8. Re:Linus has limited engineering future vision by jedidiah · · Score: 1

      No, we just understand how remarkably constrained the engineering disciplines are in terms of what problems they are asked to solve and what tools they can use to solve them. Nevermind how long they've been around and solving their particular problems (10's of centuries). You could allow a civil engineer to build completely custom components for their next bridge and even that wouldn't capture the lack of constraints that a completely artificial mathematical construct gives you.

                    Programming is more like writing a new tome the size of the Bible and expecting it to be free of any sort of error regarding intent or clarity.

      --
      A Pirate and a Puritan look the same on a balance sheet.
    9. Re:Linus has limited engineering future vision by Anonymous Coward · · Score: 0

      The craftsman didn't take into account expansion due to moisture when building either the door or the dimensions of the doorframe. This is all well understood engineering. If its a wooden door, its an easy fix of reducing the dimensions of the door by sanding and or cutting, if its not wood, you may have a larger problem to fix, or just live with if its sticking and you do nothing about it.

    10. Re:Linus has limited engineering future vision by phlamingo · · Score: 1

      This is nothing but bat poo. I'm guessing you are either a manager or an ivory-tower theoretician.

      Software development (hacking, programming, coding, software engineering, whatever) is a hard problem. Bits and pieces get easier as new tools and techniques become available, but that just extends our reach. We end up working on harder problems, not just working on the same old problems quicker. It is a specialized kind of problem solving, and the only way to automate it is to have an automaton that is as smart, creative, perverse, disgruntled, persistent, flaky, masochistic, amazing, beatiful, and maddening as the human mind it is replacing.

      I am not sure I believe in the existence of "software engineering," but, if I did, I would have to point out that all engineering requires that creative problem-solving approach that appears only in the human mind.

      --
      I had forgotten how much cooler teenagers look when they are smoking. Oh, wait ...
    11. Re:Linus has limited engineering future vision by cabazorro · · Score: 2, Insightful

      Mr. Torvalds calls it Reality (Software as the start and end point, no spec/design doc needed) You call it a PROBLEM. I say you are both RIGHT! Software needs not to follow spec every time but when it does, it must. Not all the software developers out there are or should be engineers. That's reality too and is not reprobable but commendable.

      --
      - these are not the droids you are looking for -
    12. Re:Linus has limited engineering future vision by civilizedINTENSITY · · Score: 1

      Actually it is "exactly as much" rather than "about as much" as the Halting Problem. The two are related.

      "The Entscheidungsproblem (English: decision problem) is the challenge in symbolic logic to find a general algorithm which decides for given first-order statements whether they are universally valid or not."

      "A first-order statement is called "universally valid" or "logically valid" if it follows from the axioms of the first-order predicate calculus."

      "Before the question could be answered, the notion of "algorithm" had to be formally defined. This was done by Alonzo Church in 1936 with the concept of "effective calculability" based on his lambda calculus and by Alan Turing in the same year with his concept of Turing machines. The two approaches are equivalent, an instance of the Church-Turing thesis."

      "The negative answer to the Entscheidungsproblem was then given by Alonzo Church in 1936 and independently shortly thereafter by Alan Turing, also in 1936. Church proved that there is no algorithm (defined via recursive functions) which decides for two given lambda calculus expressions whether they are equivalent or not. He relied heavily on earlier work by Stephen Kleene. Turing reduced the halting problem for Turing machines to the Entscheidungsproblem, and his paper is generally considered to be much more influential than Church's. "

      "The Entscheidungsproblem is related to Hilbert's tenth problem, which asks for an algorithm to decide whether or not Diophantine equations have a solution. The non-existence of such an algorithm (proven by Yuri Matiyasevich in 1970) implies a negative answer to the Entscheidungsproblem."

    13. Re:Linus has limited engineering future vision by rufty_tufty · · Score: 1

      It's an old article, but:
      http://www.fastcompany.com/online/06/writestuff.ht ml

      And yes I have worked for companies that could deliver the high quality maintainable software on time.
      The problem was that it meant it was at least an order of magnitude more expensive to deliver per LOC.
      It was also quite a frustrating place to work, if for no other reason than there was little room for initiative unless you were one of the 3 main architects (and they were constrained by the ITU specs), oh and there were 5 layers of management in a team of about 160 people. There were more managers on the project than engineers. And this is just engineering managers.

      But it is possible if you design it carefully enough and review things well. Specs are an invaluable part of this.

      Now I work for a different company with a different philosophy similar to the one you propose - but you pay your money you take your choice.

      --
      "The weirdest thing about a mind, is that every answer that you find, is the basis of a brand new cliche" -
    14. Re:Linus has limited engineering future vision by Anonymous Coward · · Score: 0

      This is an excellent point. Take a look at a small subset of computing: data management. The relational model is a complete model for data storage, manipulation, and integrity. But how many people are even *aware* of it? And of the people who are aware, how many actually know what it is (hint: it's not about SQL databases or any particular product, it's a *model*)? And of the people who know what it is, how many apply it to their work? I'd say maybe 0.001%.

      Certainly no *vendor* is pushing it. They want to re-invent the same crap over and over so they can sell you stuff. Never mind that the relational model can cover XML, OO, and any other automated data system (it's a *complete* model after all!)

      No *educational system* is pushing it. They just want to make sure you have "practical skills", whatever that means. What's more practical than the *foundations* of what you're doing?

      Personally, as someone who majored in engineering, the lack of interest, in fact the *hostility* toward critical thinking in IT is quite depressing. People ask stupid questions, they get stupid answers, there's safety in numbers.

      Even if a theoretical foundation was found for, say, writing a web app, nobody would even bother. Just look at the hostility toward existing theory.

    15. Re:Linus has limited engineering future vision by GileadGreene · · Score: 1
      No company has ever demonstrated a methodology that is guaranteed (or even very likely) to deliver high quality, maintainable software in a predictable amount of time.

      Really? And yet these guys seem to do a pretty good job of consistently delivering on-time, on-budget, and with an order of magnitude less defects than the rest of the industry. Is their methodology "guaranteed"? Of course not. Neither are development projects in other engineering domains. There's always risk involved in a new development. But the approach used by Praxis (careful requirements elicitation; risk-driven planning; formal specification where necessary; design by contract; etc. etc.) has been consistently demonstrated to increase the likelihood that the product you get is the product you wanted.

      There is nothing inherent in software that makes it impossible to engineer. In fact, in many ways it's easier to engineer - you don't have to account for material failures, interactions between physical laws, or any of the million-and-one other things that make designing a physical product hard. All you need to do is develop a logical construct. Software development will only remain "an art" if the practitioners of software development continue to treat it as one. And that will only be tenable for as long as people are willing to accept software that is buggy and often malfunctions. The reason that every other engineering discipline emerged was that regular failure of the products in that domain could not be tolerated. It will be no different with software.

    16. Re:Linus has limited engineering future vision by penglust · · Score: 1

      I would modify this slightly. I believe that software development is more like a science. I also believe that art and science have a lot in common.

      In any cutting edge project I have been on there were many more unknowns at the start than knowns. In general most of the preconcieved specifications generated were at least somewhat inaccurate. Part of the scientific methodology is to propose, experiment to find out what is not correct, modify and propose again.

      With a particular goal in mind truely worthy results can occur. When combined with good software tools for tracking what hapened and why ideas changed art is modified with engineering principles.

      The key to the whole thing is to allow change. About half of the organizations I have worked for/with could not handle this concept. Either the results were patched together to minic the origional spec or the code did not reflect the spec. Either way is bad.

    17. Re:Linus has limited engineering future vision by Darth_Burrito · · Score: 1

      After 40 years of 'pro' development, computing is still a human-driven craft instead of the extremely precise arm of engineering that it could so easily have become through its well-defined subject matter.

      IMO, good, appropriate development practices are emerging and will continue to do so. One might say they are emergent behaviors of a complex system. The people I see touting formal software specifications or XP for almost everything are engaged in an attempt to force a premature optimization on the software development industry. They have a particular implementation of the still relatively poorly understood extremely diverse process of software development and they want everyone to use their implementation. Random aside: accreditation committees structuring CS curriculums are another form of premature optimization.

      Most good software developers I know are learning self optimizing systems. They spend all day figuring out how to improve quality and automate processes and tend to apply those same thought processes to their own work. When something is good for someone, it will be recognized as good given time.

      If the world continued along Linus's desired path of "reality" vs theory, the current mess will know no end, and the metaphorical bridges of computer science will still be falling down in the year 3,000.

      To reitterate my earlier point, keep your shirt on.

    18. Re:Linus has limited engineering future vision by John+Whitley · · Score: 1
      Mankind's future in computing must build on immoveable foundations of theory and logic if it is to progress into a realm where machines of IQs in the millions work at our behest.

      What a complete pipe dream. This sort of mathematics fetish embodies one of the same failings that causes so much pain in modern software development. You refer to "the metaphorical bridges of computer science still [...] falling down", yet you talk like a mathematician not a civil engineer. In my opinion, you've lost either way, because you ignore the real-world problem domain in favor of a Magical Solution.

      Michael Jackson (the software development author, not the pop star) put it well in this book, p. 188:
      "Some chemists and biologists suffer from 'physics envy'. They wish their own subjects had the character and repuatation and achievements of physics. In the same way, a lot of software scientists suffer from 'engineering envy'." In the same way, you're getting into a wierd mathematics/engineering envy. Jackson goes on to say:
      The most prominent difference [between software development and traditional engineering] is that the traditional, established branches of engineering are all highly specialized. Chemical engineers don't build electricity generating plants. The automobile engineers at GM or Toyota would not accept a commission to specify a replacement for the Brooklyn Bridge. [...] In fact, the established disciplines are so specialized and so different as to have almost nothing in common. [...] Software engineers would be analogous to 'physical engineers', imaginary polymaths who understand any material, to serve any purpose.
      Moreover, you assume that "progressing" into a "realm where machines of IQs in the millions work at our behest" is even a remotely desirable goal. This sounds more like a sci-fi wet dream than a desirable end. The real problems that large-scale software development faces today are not machine problems, but human problems. Questions such as "how do we get a team of developers to efficiently develop software to meet a goal?" and "what _is_ the goal, and how do we tell if the software meets it?" are vastly important, and completely unaddressed by formal methods of the "immoveable foundations of theory and logic" variety. You've got a solution looking for a problem.

      This is not to say that formalisms (or specs... ;-) are useless; far from it. Computer science itself is the ugly-duckling melding where mathematics and engineering meet... and some of the most promising modern developments in programming languages and operating systems research have gorgeous (yet practical!) formally based foundations. Yet the successes here are all heavily grounded in real-world problem domains. Formalisms and mathematics here are modelling tools used by folks intimately familiar with these messly, real-world problems.

      And to circle back to the thread's topic: specs are downright harmful when divorced from reality, or when treated as a rigid and immutable gospel. OTOH, specs that are deeply rooted in the reality of the real-world problem domain, and which evolve to encompass the knowledge gained through the development process, can be powerful tools for communication about a software project and its goals.
    19. Re:Linus has limited engineering future vision by cow-orker · · Score: 1

      Software development is still an art, and may always be one.

      And that would certainly be romantic, wouldn't it?

      No company has ever demonstrated a methodology that is guaranteed to deliver high quality, maintainable software in a predictable amount of time.

      That is because it's impossible. Every program is new, by construction. You never write a program twice, you reuse and customize the old one. Everything that is new is a bit unpredictable, so the "predictable amount of time" is simply unachievable. That, however, doesn't make software design an "art". A civil engineer likewise cannot predict how long the design of a daring building will take, but he is still an engineer.

      Mostly, because he doesn't ship the building until his calculations show that it will support itself. It's that part where software engineers fail.

    20. Re:Linus has limited engineering future vision by rswail · · Score: 2, Interesting
      The world of computing is in crisis. After 40 years of 'pro' development, computing is still a human-driven craft instead of the extremely precise arm of engineering that it could so easily have become through its well-defined subject matter.

      It is precisely these sorts of statements that show how far away we are from software "engineering". Software has exactly NOT got a "well-defined subject matter". The subject matter of software is completely variable and ill-defined. The elucidation of requirements is an almost impossible task.


      The "reality" which he so seems to praise is THE PROBLEM in software engineering, and not something to be endorsed or supported.

      But the reality that Linus is stating is just that, reality. The nascent field of software engineering has not yet been able to clearly enunciate what "THE PROBLEM" is, let alone come up with something approaching a methodology and practice to solve it.

      Until the field can clearly state what the area it tackles includes and excludes, software development will remain closer to craft/architecture than engineering in its methods.

    21. Re:Linus has limited engineering future vision by mr_zorg · · Score: 2, Insightful
      Software development is still an art, and may always be one.
      The problem I see is "people like you" ensure that software development will remain an art. I agree with the parent that software engineering should be based on more repeatable solid foundations, like most other engineering disciplines are. That's not to say there isn't room for artistry in it, however. Take building design, for example. Most structural engineering is based on tried and true formulas and known design patterns that work. However, each architect injects a little bit of their own artistry into a building design. Some, such as Frank Lloyd Wright, are clearly more artistic than others, but even still their work is based on the tried and true. Software engineering, on the other hand, is still far too ad-hoc.
    22. Re:Linus has limited engineering future vision by dubl-u · · Score: 1

      After 40 years of 'pro' development, computing is still a human-driven craft instead of the extremely precise arm of engineering that it could so easily have become through its well-defined subject matter.

      Software will never be like building bridges. Why? Because we relentlessly automate all of the construction process, and as much of the design process as we can get away with.

      When my dad started programming, he flipped physical switches or punched physical holes for each bit. I type "ant clean deploy" and the computer flips hundreds of millions of switches for me, building, testing, and rolling out an entire app across a server farm that can serve millions.

      Engineers making physical things have lots of procedures and rituals because they do similar things over and over, and because making changes is expensive. Neither has to be true in software, so it's unsurprising that software development looks nothing like traditional engineering and never will.

    23. Re:Linus has limited engineering future vision by dubl-u · · Score: 1

      Advocating some sort of ad hoc "practical" computing barbarism is very short-sighted, dangerous, and regressive.

      I note that 99.9999999% of the design that has taken place over the last 500 million years, give or take, was done in a fashion much more ad-hoc and "practical" than Linus is advocating. I refer, of course, to evolution.

      Given that the rigorous, logical approach to engineering hasn't yet produced something as interesting as a mosquito, isn't it a little early to completely throw out the one technique proven to produce functioning complex systems, even if it does seem a bit barbarous?

    24. Re:Linus has limited engineering future vision by Anonymous Coward · · Score: 0

      "...the lack of constraints that a completely artificial mathematical construct gives you."

      Completely artificial mathematical constructs are not free of constraints; they have arbitrary, but precisely documented, constraints.

    25. Re:Linus has limited engineering future vision by nihilogos · · Score: 1

      Godel and Russell constrain our mathematics and logic (and scientific progress) about as much as the Halting Problem constrains computing.

      You mean, thus far they haven't constrained our scientific progress. There is a growing belief amongst physicists working on quantum gravity that we have come up against exactly this problem.

      --
      :wq
    26. Re:Linus has limited engineering future vision by SilverspurG · · Score: 1
      the current mess will know no end
      It never will no matter what anyone does. That's why it's called life and it's how you know it's real.

      Linus was being a realist.
      --
      fast as fast can be. you'll never catch me.
  65. The code is the detailed specification by Anonymous Coward · · Score: 0

    When will people realise that the code is the specification. Supporting documentation is usefull; state transition diagarams, design rationale, protocol specs etc... Detailed documentation that is generated from source is also usefull, anything else, forget it, you are wasting everyones time.

  66. and... by Anonymous Coward · · Score: 1, Insightful

    and, we all know, all browsers implement all of them correctly, right?

    Take a look at your w3c specs. There's _no_ browser on eart which implements 100% of those specs. Nobody builds web pages according to w3c docs, you've to make them work in IE and firefox - none of those implements all the standards 100%.

    The point of linus is mainly targetted to hardware makers. Take a look at the hell that ACPI support is, or the first motherboards who implemented IOAPIC support. Specs are _useless_ in those cases. And you can't "fix" hardware: Hardware is there, and your task is to make it work. You've two options: forget the specs, and make it _work_, or write the code according to specs.

    The _real_ standars are those which are not written, ie: bugs in the POSIX implementation of some unixes that some apps rely on and that now everybody implements in other unixes because _everybody_ uses it, despite of being "wrong". Same for TCP/IP, same for "everything". I'd say that specs are OK as a reference, but if you want to write software which works in the _real_ world you must not follow them blindly. You must accept that people will not follow them and design your software according to that.

  67. What do the free BSDs people do? by beforewisdom · · Score: 3, Interesting

    The open source BSD distributions have a reputation for being better on the back end then gnu/linux ( I honestly do not know if that is true or not ).

    What do they do? Do they design what they are going to do and use specs before they do it?

    Do they have a single person who calls the shots on how their kernel is done?

    1. Re:What do the free BSDs people do? by Otter · · Score: 1

      I think that part of that reputation is that BSD users think in terms of releases, not continuous incremental development. If all Linux users went from one Red Hat (for example) distribution to the next, with just official Red Hat updates in between, things would go a lot smoother. For historical reasons, though, Linux use has always emphasized immediately updating and recompiling kernels at every new minor version, and a lot of those are simply not ready for use.

    2. Re:What do the free BSDs people do? by synthespian · · Score: 1

      My impression is that they're more compliant with Unix specs (as in OpenGroup).
      Some BSD developers have a thorough understanding that programming in C is dangerous and have implemented savefty nets around that fact (see Exploit Mitigation Techniques, see a recent discussion on Kernel Trap about OpenBSD's memory allocation :http://kerneltrap.org/node/5584)

      --
      Main difference between the BSD license and the GPL license: one is from California and the other is from Massachusetts
    3. Re:What do the free BSDs people do? by asuffield · · Score: 2, Insightful

      Put simply, they implement less. Less features, mostly - usually to the point of anemia. So while the BSDs might be more likely to work, the GNU platforms are more likely to actually do what you want. That's probably got a lot to do with why the GNU platforms have been a qualified success, while the BSDs have mostly been irrelevent in the market. After all, it's easier to fix a bug than it is to implement new features.

  68. Internet Explorer violates specs/standards too! by metalmaniac1759 · · Score: 1

    I probably don't know the difference between 'specs' and 'standards' but if you read Theodore's mail you would realize he's actually belittling people who religiously follow specs (Mozilla/Firefox?) and that he doesn't really have a problem if people violate specs (Internet Explorer)!

    Confused?

    Nandz.

  69. Specs look good in meetings... by O2dude · · Score: 1

    Most interesting point in Linus' argument is that specs are good for _talking_. Which makes complete sense to me, as it seems that those that can't code their way out of a soggy paper bag are the strongest supporters of spec-driven development.

    --
    - It took western civilisation 2000 years to ensure popular literacy, and now we work with icon driven GUI's. Go figure.
  70. it's about managment by timmarhy · · Score: 1
    i have seen software spec's so detailed they detail themselfs out of all relevance. the furthur into detail they go the more work they are to change when it comes time to making the thing work. i have found by far the best method is to get the REQUIRMENTS right first, then draw a rough mud map of how the thing must work, then split up the sections and work them out in detail as you go.

    100 page novels pretending to be specs are totally useless.

    --
    If you mod me down, I will become more powerful than you can imagine....
  71. Depends if there is new deisgn (none in Linux) by CaptainFork · · Score: 1
    Linus has a skewed view of the software process because Linux basically has no new designs in it. All the "high level" (or as Linus would say, "theoretical") work behind that OS had already been done by earlier OS designers, most notibly the designers of various Unices. All Linus et al have done is to create new source code to implement these old designs.

    When you are actually designing new stuff (instead of re-typing established algorithms) you have to do a lot of thinking about how it will work. If it's big, then you will spend time and have multiple people involved. The best way to remember stuff over that time, and to allow people to understand each other is via certain documents. Code is slow to write and is easily misunderstood (as a way of communicating design intent).

    Of course up-front designs are usually wrong, but they're still better than nothing (in the absense of an overwhelming precident such as UNIX). Imagine if make had been designed first, for example.

    I think if you are going to write something similar to something that's been written before, then you can just jump in and start coding. But please, Linus, don't pretend your method is right for large new designs, or that you even have any knowledge of that area of software.

    PS anyone noticed how in KDE the backdrop goes monochrome at the log-out window, only to flash back to colour just before shutting down? Just like Windows? Maybe sticking too closely to established designs duplicates established problems...

  72. Absolutely true! Mod parent up! by Magnus+Pym · · Score: 1

    Attitudes like this are precisely what makes most professional organizations recoil at the thought of using open-source software.

    Don't get me wrong, I am a big fan of GNU/Linux, have been using it personally and professionally since 1995. But Linus' comment comes across as naive and simplistic.

    Not many practical projects can get out of the gate without having well-written specifications. Release planning, feature testing, multisite collaboration, maintainability etc are impossible without them.

    Of course, it is always possible to take specs too far; they can also become powerful ammo in the day-to-day power struggles between program management/quality assurance/programmers.

    However, to make a blanket statement to the effect of "specs are useless" is on the same vein as some of the other streams of thought on Slashdot like "Management is useless". It reflects a complete absense of big-picture knowledge, and anyone with real experience within an organization will discount anything else from that source immediately.

    Magnus.

    1. Re:Absolutely true! Mod parent up! by Ex-MislTech · · Score: 1

      Its the fear of lack of control, power and control .

      If it looks like it is not conformed, controlled, leashed, it must suck .

      Look at Windows...Conformed, Controlled, Leashed, totally marketed as a Engineered Wonder .

      pfffft.

      I think a "Best practices" guideline might float, but Specs most of the time just end up
      being re-written to conform to what works .

      As u break new ground you break old ways, not always, but often .

      Ex-MislTech

      --
      google "32 trillion offshore needs IRS attention"
  73. Linus is not always right by tototitui · · Score: 0, Redundant

    From the same thread again from Linus, he doesn't spare us of a weird view about what science is !

    It's like real science: if you have a theory that doesn't match experiments, it doesn't matter _how_ much you like that theory. It's wrong. You can use it as an approximation, but you MUST keep in mind that it's an approximation.

    A theory is the best explanation we have for a set of facts, a hole in it doesn't make it suddenly "wrong" if we don't have anything more accurate. (cf weird cosmologic constants and things like that). A theory beeing an approximation, it is always true.

    1. Re:Linus is not always right by Ex-MislTech · · Score: 1

      Anything that u want to call a theory, something being considered in
      line to become a Law, ex.: Law of Thermodynamics has to hold up against
      all experiments .

      If it cannot do this, it remains a theory, and this is why it is something
      that is NOT always true .

      With that in mind, something that is not always right, is not always right to use .

      Ex-MislTech

      --
      google "32 trillion offshore needs IRS attention"
  74. While we're all screaming "The Comfy Chair?!?!"... by Hosiah · · Score: 1
    I notice that Linus softens his arguements considerably with "almost" "nearly", etc. He's not tarring every line of every spec ever committed to paper with the same brush.

    The minds of the great and accomplished sometimes work in ways less fathomable to us mere mortals. But my take on this is "Be aware of the spec and if it matches reality, so much the better, but if it doesn't, it's time to throw away the spec." I'm considering it in the same spirit of "Just because you've seen a street map of New York, doesn't mean New York is divided into regular squares labeled 'E1', 'E2', etc. In other words, don't mistake the map for the territory." It's good advice for those wise enough to know how to take it, I think.

    Get up to your elbows in code, and you'll notice the same relation between an object's spec and how it actually works that you see between a bill passed that creates a government department and what that department actually does ten years later. We *all* struggle to follow specs, standards, and protocols, but we keep running into special cases and exceptions that we have to work around.

    Only an hour ago, I was grumbling over this very fact while pecking at my own box. I'm trying to write my own news-feed aggregator, and even though I'm sticking to feeds that specifically use RSS 2.0, I find the interpretation of RSS specs from one news-site to another into an actual feed are broadly applied at best and liberally amended to at worst. Once again, I have to ditch my initial "one-size-fits-all" idea (like I knew I would) and write the code to handle all the special cases and quirks (of course, this is a loose example: only three elements per list item are required, and some sixteen are "optional", with very fuzzy definitions. It's hardly expected to be carved in stone.). It's just how real life works.

    Linus has always struck me as a severely practical, down-to-Earth person. His opinions can be considered as much an indictment of the spec-creation process as of specs themselves.

  75. Thoughs on specs . . . by Anonymous Coward · · Score: 5, Interesting

    From one of my past lives, when I designed computer systems in automobiles, before my current stint as a grad student, I can describe how we used specs. Some of our business folks who had some basic training as engineers would get together with our customers folks who had basic engineer training, and hammer our a 100+ page spec document covering everything from basic operating precepts to acceptable failure modes. They would use this document as a means of discussing what they thought they wanted to buy, and what we thought we could supply for them, and then determine a cost from this proposed spec.

    After enough words had been passed back and forth, both sides would agree on a version of the spec, money would be passed around, and hardware design engineers and software engineers from all over the world would get to work. At this point, the spec would be skimmed, people would get a rough idea of what everyone wanted, and a couple hundred of the first prototype version would be cobbled together.

    Testers and verification people on both sides of the fence would look at this thing, first against the spec and make sure it included everything that was talked about, and then in the system to make sure that it would work they way they needed it to. This is the closest that the design ever got to the spec. After this point, everyone would start noticing places where the spec was either too rigid to be followed cost-effectively, or just plain wrong for our customer. Since rewriting a spec is a ton of work, it never got done, and in the end was just a basis for verification folks to look at the design and complain that it didn't work they way that they thought it should. I guess someone should have included them in the "cool peoples idea passing club", but, neah.

  76. This isn't software in a vacuum by Phaid · · Score: 4, Interesting

    This article isn't about a general comment as to how software should be written; it's about implementing protocols. And protocols have to be defined by specifications -- you can't simply have some vague spec that says "it should do approximately this"; you have to precisely define the language of the protocol so that everyone knows what they are implementing.

    That being said, Ted Ts'o makes the most important comment in the discussion: This is the reason for the IETF Maxim --- be conservative in what you send, liberal in what you will accept. In other words, when your code talks over the protocol, be minimalist and adhere strictly to the spec; but if you can implement your code in such a way that it is tolerant of small variances (e.g. combinations of commands which make sense but are not allowed by a strict interpretation of the protocol spec) and can do it safely, then you should. This is the approach I've always taken, and having done things like implement a major printer vendor's IPP server, I have found this approach makes interoperability and compatibiltiy a lot easier and less painful to achieve.

    So at least from that standpoint, I think I can see what Linus is trying to say; at any rate I agree that strictly adhering to a spec simply for reasons of mathematical correctness is not always the most productive route.

    1. Re:This isn't software in a vacuum by Anonymous Coward · · Score: 0

      There are problems when you're too forgiving of bungled input, though. Just look at the history of Web standards. Browsers are so good at rendering crappy HTML, it took forever to get browsers that could render correct HTML. Meanwhile, there's a huge cost associated with all that crappy HTML still floating around.

      A certain amount of rigor in the validation phase will save a lot of headaches in the long run. And don't forget that there are often very good reasons for why things are done in a certain way; a huge number of significant security holes have resulted from URI parsing that is more relaxed than the standard.

      In fact, a vast number of bugs result from insufficiently validated input, from improperly escaped SQL to Web forms that try to use JavaScript to guard against bad user input.

      Unless you fully understand all the ramifications of the relaxation (and who does?), it's better to err on the side of strictness. After all, strictly conformant implementations can still talk to each other, which encourages more implementations to be correct.

  77. Types of specs... by PhotoGuy · · Score: 2, Interesting

    There are different types of specs. Big, formal ones, done in a vacuum, and less rigid ones. I'm a big believer in properly defining "interfaces" between different chunks of code or modules, and effectively, that's a spec. Again, I'm sure Linus uses defined interfaces all the time.

    Linus codes to specs every day; the Unix/Posix API was a useful one, certainly; he didn't just go inventing his own system calls, he used standards.

    I can understand why he wouldn't want to be arbitrarily constrained in kernel development by being restricted by a spec. But perhaps if he applied a bit more of this, I wouldn't have a __foo_bar_blat when compiling and loading a module with a new kernel. (And after digging, finding out that the kernel system call is no longer present. Arrrrgh!!!) This, IMHO, is one of Linux's biggest weaknesses.

    --
    Love many, trust a few, do harm to none.
  78. Incorrect analogy with science by Morgaine · · Score: 1

    A theory in natural sciences attempts to describe an existing physical system, and a theory in synthetic sciences (like mathematics) describes a non-physical system which can be brought into existence by exact implementation of the details of its theory.

    Neither of the above apply to evolving a system through iterated development or evolution, directed only by practical constraints, which is what Linus and the kernel community are doing. This makes the analogy with theories in science less than helpful.

    Linus should be talking more about "fixed points" than about theories. Specs are fixed points which introduce some stability into a shifting world, and they are good both for those who want solid products and those who want to live at the bleeding edge alike. After all, when at the bleeding edge, you still want your tools to work reliably.

    That said, the future of mankind (in computing) will have to replace the current ad hoc mess by hard synthetic science and engineering in due course, and therefore theory and logic will become central. However, we're not even on the first rung of the ladder in that respect.

    --
    "The question of whether machines can think is no more interesting than [] whether submarines can swim" - Dijkstra
  79. If specs are 100% accurate,then they are the code. by master_p · · Score: 5, Interesting

    I have been working with specs-driven projects for the most part of my professional career, and I can tell you that Linus has a point.

    If specs were 100% accurate, then there would not be a need to write the code, because the specs could be automatically translated to code (we are talking about 100% accuracy here, not 99.999999%). But specs can realistically never be 100% accurate...it is the missing part from the specs that causes headaches.

    For example, I have worked in a project that required conversions between coordinate systems: UTM to geodetic, geodetic to local cartesian, local cartesian to target, etc. The user expected to edit UTM coordinates in the GUI, but the specs for UTM coordinates where never mentioned in the Software Requirements Specification. So we searched the internet, found out what 'UTM' is, and coded the relevant functions.

    You know what? the specs talked about UTM coordinates, but they actually meant MGRS! UTM means 'universal transverse mercator' whereas MGRS means 'military grid reference system'. Although the concept between the systems is the same (the Earth's surface is divided into rectangular blocks), the two systems have different calculations.

    When we released the application to our customer, they freaked out seeing UTM coordinates, and of course they refused to pay. Then we pointed out that the specs talked about UTM coordinates, and they (thank God) admitted their mistake, paid us, and gave us time to change the application from UTM to MGRS.

    But the application has never been correct 100% (from that point on) until recently handling MGRS coordinates, because it was very difficult to successfully change something so fundamental and yet so missing from the specs(we are talking about 160,000 lines of C++ code).

    Do you want another example? in the same application, the program should display a DTED (digital terrain elevation data) file, i.e. a map created out of a file of elevation data. The specs did not say anything about the map display respecting the carvature of Earth. So we went out and implemented a flat model, where each pixel on the screen was converted linearly to a X, Y coordinate on the map.

    Guess what? they meant the map display to be 'curved', i.e. respect the Earth's carvature. The specs did not say anything, until the application was connected to another application that produced the video image of the battlefield using OpenGL (and of course, since it was to be in 3d, the presented map was 'curved').

    The result is that the application still has some issues regarding coordinate conversions.

    After all these (and many more...) I am not surprised at all that some certain space agency's probe failed to reach Mars because of one team using the metric system and the other team using the imperial system. Even for NASA that they write tons of spec and they double- and triple- check them using internal and external peer review, specs were useless at the end.

    So Linus has a point...

  80. Re:Remember Linus is a hands-on practical kind of by sydb · · Score: 2, Informative

    The root word of "spec" is "speculation".

    No. Spec is short for specification, and has nothing to do with speculation, other than that one aims to identify something distinctly, one type of seeing, and the other entails a flight of fancy, another type of seeing.

    Please don't present your own mistaken speculations as facts.

    --
    Yours Sincerely, Michael.
  81. I don't get it.. by krunchyfrog · · Score: 0

    Ok, I admit I did't read TFA, but if I remember correctly, we sent men on the moon with a computer that could maybe count as a P-133 nowadays, *years* ago. And today, huge companies such as MS have trouble putting code together to surf web pages! I remember using a computer years ago that when I used Notepad on it, the computer would BSOD right away.

    --
    printf($randomline(sigs.txt) \n "-- "$randomline(authors.txt));
    -- myself
  82. This is stupid by ProppaT · · Score: 1

    The reality of it is, when you're working with a massive scale project, you need a spec. Linus complains that specs are based on theory and not real world? Well, duh...the specs not supposed to hand you your code on a plate. It's supposed to describe how, in theory, this beast is supposed to work. So, you know, at any given time someone working on the project can reference it and, even if they don't know how to read code, read through the processing enough to get some idea of what's going on. What some people loose sight of is that the spec isn't only for engineerings use. Project managers, proposal writers, technical writers, etc all have to use this to perform their daily job and, not to get nasty, but engineers usually aren't the easiest to talk to get information...and it's near impossible to write a manual or do an analysis on something that somebody in the "know" thought. Engineers are busy...we're all busy...but the spec in the one unifying thing between everyone working on a project. If you take this away, we start to crumble. In my mind, this just shows the nievity of Torvald and why Linux will probably never get it's act together enough to become a dominant force in the desktop workplace.. Designed for nerds, by nerds...orchistrated by one of the biggest nerds who doesn't want to smell the reality of why the rest of the world forces "specs" and other organization tools on engineers. They're too busy to keep organized without an extra push.

    --
    Wise men say, "Forgiveness is divine, but never pay full price for late pizza."
  83. Mixed feelings by Kaldaien · · Score: 3, Insightful

    I can see where Linus is coming from; on the other hand, I can see where the statement is fundamentally flawed. The best example I can give is a 3D engine. I have worked on an OpenGL engine for almost 4 years now, and certain aspects of the engine development (namely shader architecture) were purposely left without a formal 'spec'. 3D Hardware changes more rapidly than one can build a 3D engine from scratch. If the entire engine followed a 'spec' from day one, it would be obsolete by the time it were finished. If you had asked someone four years ago what NVIDIA and ATI would be working on right now, they could never guess that vertex and pixel shaders were beginning to merge (both on the hardware (shared pipelines) and in functionality (pixel shaders have front/back face information and vertex shaders can perform texture lookups)). They could have made assumptions that caused them to code themselves into a wall so to speak and which prevents them from ever utilizing the features of Shader Model 3.0.

    On the other hand, there are other teams who work on gameplay and network development. For the most part the network developers can develop a 'spec' and reasonably follow it. The gameplay mechanics follow a constantly revised 'spec', and probably the only one the consumers who play the game are ever familiar with. In this aspect of development, a 'spec' is _required_ to complete the project in a reasonable timeframe.

  84. Andrew, is that you? by hummassa · · Score: 4, Funny
    Linus is an engineer/tech. He dislikes theory work because it often gives nothing in practice.
    Actually, I think he disklikes theory simply because he does not understand it! If Linux development becomes more based on theory than practical hacks, there will be no place for him on the top.
    You could at least have posted non-anonymously :-)
    --
    It's better to be the foot on the boot than the face on the pavement. ~~ tkx Kadin2048
  85. Some work, some don't. by Bozdune · · Score: 1

    Humor is the right response to this, because basically, the more amorphous the problem, the more difficult the spec. There's no right answer.

    o Worst case: an effort to specify a business process to be automated, with input from 25 high-powered consultants with 25 times zero years of practical experience.
    o Best case: an effort to specify a coherent system with predictable input and verifiable output.

    There are numerous examples of both cases cited by various respondents. Ultimately the quality of the spec, if there is a spec, comes down to a balancing act between cost and the consequences of failure. If a communications protocol is ill-defined, the result is a hung communications line. So the spec must be tight enough to allow two independent implementations to cross-communicate, or the entire effort is useless. On the other hand, if some web-based bullshit e-commerce app is specified poorly, so what, some schmuck somewhere on an odd Tuesday can't order a Swingline Stapler. It's not the end of the world.

    I also claim that most creative work is spec-less by definition. You're shingling into the fog, and there isn't any chalk line to follow.

  86. There are many kinds of specs by Jeremy+Singer · · Score: 2, Insightful

    Each kind of spec has its correct use. Some (like the Pirate's Code) are more like guidelines than hard and fast rules. The rules for a Sonnet or Haiku or Limeric are quite strict, but leave a tremendous amount of latitude to produce different results. Write what you want, but if you don't follow the spec for a Sonnet, its not a Sonnet. Objective, testable specs are essential for any enterprise application to work. Very often, in such an environment, the programmers for different parts of the enterprise may never meet or even know each other's names. The spec is what binds the application together.

  87. Linus' finite amount of experience by HuguesT · · Score: 1

    Maybe Linus has never seen a useful spec, it doesn't mean that they don't exist.

  88. hardware specs by LatePaul · · Score: 4, Interesting

    That's because Linus is talking about hardware specs. His view is that it's better to trust reality (how the device actually behaves) than a spec (how it's documented to behave). And he's right about that.

    Outside the world of OS kernels there are many software projects where the 'reality' is much more changeable, much less solid. Reality in the case of a Purchasing application or your KDE/Gnome desktop applet or the latest FPS game is likely to be a case of 'what the customer/user wants'. That's something you really need to pin down. Doesn't mean it can't change but it needs to be clearly defined.

    1. Re:hardware specs by haggar · · Score: 1

      That's because Linus is talking about hardware specs. His view is that it's better to trust reality (how the device actually behaves) than a spec (how it's documented to behave). And he's right about that.

      I don't know if that's what Torvalds is talking about, but it is nonsense. You can't develop embedded software or a driver if you don't know the specifications of the device your code will have to work with (or on, in case of embedded). I think this is obvious.

      Of course, after designing there is testing on live hardware, but without the specs, you couldn't even start any design and development.

      --
      Sigged!
    2. Re:hardware specs by dubl-u · · Score: 1

      Reality in the case of a Purchasing application or your KDE/Gnome desktop applet or the latest FPS game is likely to be a case of 'what the customer/user wants'. That's something you really need to pin down.

      I disagree utterly. I don't know from KDE/Gnome applets, but purchasing apps and games are both great examples of where you shouldn't try to pin things down. The problem is that human imagination is woefully limited.

      With business software, what people say they want is heavily based on extrapolation from what they've seen. As soon as you deliver something new, their experience with that gives them new thoughts, better ideas. The optimal approach is to pin the absolute minimum, ship that, and then repeat.

      Games are even more like that. The possibility space is much larger, meaning that you can only afford to implement a tiny, tiny fraction of all the cool ideas that people have. And "fun" is a much harder target to hit than "works adequately for making money". Fun also decays much more rapidly: what was fun last week is boring next week. Every game developer I've talked to spends a ton of effort tweaking things to cross the gap from "implementation of initial vision" to "rocks your world".

  89. grey area by sl4shd0rk · · Score: 2, Insightful

    Specs are good for propping up initial work, but they go all-to-hell quickly when projects near milestones or late completion dates. Also the mcdonalds-mentality of "hurry up with my order, I want it yesterday" that the customer always wants does not afford a lot of time to follow a regimented procedure to the tee. I've watched people (myself included) spend an assload of time writing code to follow an exact process only to constantly be late, or go crazy trying to make dates.

    Programming is a creative form, no question about it. When you try and corral people's creativity into a one-size-fits-all nutshell of procedures, you are strangling possibly the largest asset they could offer you.

    I encourage people to make their code readable and use comments that serve a purpose.
    That's about it.

    --
    Join the Slashcott! Feb 10 thru Feb 17!
  90. Personally for me it's about the APIs by YoungHack · · Score: 4, Interesting

    My experience getting into the kernel was usually motivated by trying to write user space programs. I finally learned what people meant when they say Linux isn't well documented.

    I could care less whether there's a spec, but if I'm going to use an API, I have to know what it does. The ALSA (advanced Linux sound architecture) is absolutely the worst. The documentation is full of entries that have the form:

    SetFooOn()

    This function sets foo on.

    Now the thing I don't understand is this. If you went out to write a really big and important piece of software, wouldn't you want people to use it? What's the point of an undocumented API? It makes no sense whatsoever. You either want someone to use it, and you tell them how, or you make the methods private (i.e. not part of the API)?

    Rant over.

    1. Re:Personally for me it's about the APIs by Ziviyr · · Score: 1

      Alot about unified sound drivers falls back to the specific hardware driver it calls.

      Also for simple things like SetMuteOn() you really don't need more than that. When ALSA is just passing a bit to another driver, theres really not much that can be said about the bit flipping function except that it flips a bit called name and passes it down the chain.

      *shrug*

      --

      Someone set us up the bomb, so shine we are!
    2. Re:Personally for me it's about the APIs by matfud · · Score: 1

      Welcome to the joys of open source!

      I like open source software but much (most) of it is so badly documented as to be almost useless.

      I do not think you should have to read to source code to find out how to call a method. You should only need to do that if you find a problem when you try to call the method the way the specification (or even comments...if there are any) says it should be called. Much of the available software (In particular I mean you Apache) is like this (ie very badly documented). A higher level of documentation is also necessary: the stuff that explains, in general terms, how to use the apis provided. This is also a specification of a sort.

      cheers

      matfud

    3. Re:Personally for me it's about the APIs by oglueck · · Score: 1

      In my opinion a software engineer that codes an interface without documentation should loose his degree. But this is API. The original disussion was about Specs.

      I have one really good example: ACPI. It is an enourmously complex spec. And the reality does not follow the specs at all. Hardware manufactures work so closely together with Microsoft that they release the hardware when it runs Windows. No Wonder those poor Linux kernel guys never get a chance to get it working correctly. There are just too many bugs in the hardware and they end up writing work-arounds for many cases.

      Any other examples? USB anybody?

    4. Re:Personally for me it's about the APIs by Dirtside · · Score: 1
      If you went out to write a really big and important piece of software, wouldn't you want people to use it?
      Very few people set out to write a "big and important" piece of software. ALSA, like most FOSS projects, was written to scratch an itch. Because the authors appreciate what the GPL does, they released it under the GPL so that other people could use it and tinker with it. They're not selling it; there is little incentive to document things thoroughly.

      Yes, I realize that if they documented it thoroughly, then people would be more willing to contribute to the project and improve it blah blah blah FOSS-cakes, but all FOSS projects start out small, and the amount of work to thoroughly document everything, at first, doesn't really seem worth the effort. And probably isn't.

      --
      "Destroy science and religion. Science would re-emerge exactly the same; but not religion." - Penn Jillette, paraphrased
  91. luben disagrees with linus by codepunk · · Score: 1

    Luben disagreed with linus but picked the worst possible target to back his claim. He used the scsi specs to claim that specs are necessary so that two hardware vendors can create hardware that interoperates properly. Obviously he
    has never seen the exception lists for the scsi hardware within the kernel. I understand where Luben is comming from but as Linus stated it is far from reality.

    --


    Got Code?
  92. Load of bull, Linux is based on specs, Star Gate by Theovon · · Score: 3, Insightful

    We wrote the Open Graphics Project spec not based on purely abstract theory but based on the experiences and needs of the community. Purely for the sake of survival, I made it clear that there should be nothing in the design which could not be justified by common needs. Based on that, we developed a SPEC.

    Maybe Linus is having a language-barrier problem, but a spec is just a description of something, albeit somewhat formalized. That means you could write a spec retroactively. We could write a spec for the Linux kernel as it is right now. If we were to do that, would Linus abandon Linux? It wouldn't be THAT hard to make it accurate.

    Frankly, I can't write anything without SOME sort of spec. Often, those specs are contained completely within my brain, but I nevertheless must develop a coherent concept of what it is I'm going to build and what its pieces are. When I write a document, I often start out with some sort of outline. And when I write code, I have to decompose it into functions.

    If a spec is any coherent description of something you make, then Linus uses specs all the time, and he's just blowing smoke out his ass.

    He's complaining about specs because they're usually done badly. JUST ABOUT EVERYTHING IS USUALLY DONE BADLY. Should we say that all operating systems are bad just because Windows sucks? Should we say all cars are bad just because the Ford Taurus is designed to last only 5 years? Should we do away with TV just because of shows like "Two guys, a girl, and a pizza shop" or "Survivor"?

    Linus is forgetting that Linux is based on specs, Honda makes reliable cars, and Star Gate SG1 is on on SOME channel just about all day.

  93. Re:If specs are 100% accurate,then they are the co by Geccie · · Score: 1

    A similar paradigm is Design-Code-Test. People who Engineer software believe the design is the code. What you've pointed out is why an iterative model is much more useful. If some degree of functionality was available in the earlier stages, the problems would have been seen during the projects infancy.
    We are not all-knowing, nor infallible. There are no perfect plans. Reaction is critical.

  94. Computer science is more art than science by cybersekkin · · Score: 2, Interesting

    To the earlier poster who compared writing code to airplane design. basically remember that airplane dynamics and stresses and struture is dictated on by a series of "specs" that were worked out by trail and error. When they found something they do not understand you typically see the wonderful "constant" which goes like first yo multiply this form by the factor of the weight and airpraesure and then forget all that and multiply by the this and magiccaly you are now in Oz. (honestly when I took calc II years ago my professor did that I said "huh" and got back a "trust me" response. (real good for a scientific understanding-no explanation-just trust me)

          In truth building software to specs is almost worse than useless. design to Interfaces(YES), but when making interop software you cannot and should not rely on how another piece does its calcs just that it does its part and spits out a response (or does its part) if it returns a structure you should use the proper accessors to read the structures data as structures change from iteration to iteration. Linus is correct in that specs are wrong in fact after a few more iterative releases they usually are out of sync and cause more problems than they could have ever fixed. If programming was like an engineering project where we had a base set to use (dynamics of metals and properties of power systems) then great specs would be good, but in truth when getting past base libs we have very little of a solid unchanging base to base a spec on. hence why computer programming is less science and more "art of"

    1. Re:Computer science is more art than science by Bassman59 · · Score: 1
      "In truth building software to specs is almost worse than useless."

      If you don't have a spec, then how are you supposed to know that you've met your customer's requirements?

      Face it, those of you arguing that "specs are useless" clearly don't live and work in the real world. Sure, you can do your toy/hobby projects and amuse yourself without any idea what the end results must be, but when it's your job to write/design working and reliable products for actual customers who pay actual real money for specific functionality, then let's see how long you last before you're back working at the Quickie Mart.

  95. Russell is doing just fine, thank you by Morgaine · · Score: 5, Interesting

    Bertrand Russel tried to put mathematics on an immovable foundation of theory and logic, sadly it turned out to be impossible.

    I don't think that you got very far with Bertrand Russell.

    The higher-order issues he identified caused just a temporary hiccup in the development of logic. While undoubtedly fundamental, that problem paraphrases best as "There are hidden depths to this", rather than as "All is lost".

    Godel applies, as always. You don't apply a theory outside of its domain of discourse, not if you know what you're doing anyway.

    Russell showed that the domain of logic gets tangled if you use it to think about itself. Well (with hindsight) that is no surprise at all. The expert logician recognizes the necessary boundary, and virtualizes the outer domain before it can be handled by the inner domain logic.

    Russell is doing just fine, thank you. Almost the entirety of mankind's technological world is founded on the logic which you describe as "impossible".

    --
    "The question of whether machines can think is no more interesting than [] whether submarines can swim" - Dijkstra
    1. Re:Russell is doing just fine, thank you by bfields · · Score: 1
      "Russell showed that the domain of logic gets tangled if you use it to think about itself. Well (with hindsight) that is no surprise at all."

      The vague idea of Gödel's proof, if I remember right, was to show that any consistent theory was incomplete--that is to say, either your axioms disagree with each other somehow, or there are theorems out there which can't be proved or disproved. His proof involved a construction that was, as you say, rather self-referential and "tangled". This does not at all imply that it is *only* such self-referential statements are problematic. There may be lots of other innocent-seeming theorems which are fundamentally unproveable.

      And as a practical matter it's easy to find theorems in mathematics that are extremely difficult (possibly impossible) to prove. (Though *proving* they're impossible to prove seems to always be virtually impossible.)

      In short, math is hard. There are some important problems that it does solve completely, but pick a practical problem at random, something that you need fixed today, and it may not be there for you.

      --Bruce Fields (an algebraist, definitely not a logician...)

    2. Re:Russell is doing just fine, thank you by veg_all · · Score: 2, Insightful

      I don't think that you got very far with Bertrand Russell.
      Why can't anyone here disagree with anyone else without insulting them? I think you too casually discount the magnitude of Russell's dilemma vis a vis set theory and the theory of types. He wanted the impossible, as we now know in a formal sense thanks to Gödel, namely a complete and consistent logical system, and his failure to resolve his paradox was devistating to him (and moreso, I think, to Whitehead, but I may be worng about that). How far is far enough into Russell to understand that his most formidable acheivement is tainted with a paradox at its heart? You say, "Russell showed that the domain of logic gets tangled if you use it to think about itself. Well (with hindsight) that is no surprise at all." I submit that it was quite a big surprise indeed. And further that its implications, while often overstated, aren't merely a "hiccup," but instead place it at the top of that rather rarified class of ontologically significant mathematical discoveries.

      --
      grammar-lesson free since 1999. (rescinded - 2005)
    3. Re:Russell is doing just fine, thank you by cow-orker · · Score: 1

      Godel applies, as always.

      But not to the extent many think. Whether it is Gödel or Turing doesn't make much difference, at the core, both theorems say almost the same: Given a arbitrary program or proposition, you cannot decide some of its key properties.

      However, you are never given "an arbitrary program". You write it, and as long as you write by some other methodology than randomly punching keys, you have a sketchy proof of how it will work in your head. For these programs, halting is decidable, and all properties can be proved. Gödel has no say in the matter, because no one writes self referential programs.

      Truly, philosophers and incompetent programmers made Gödel's Incompleteness Theorem the most abused theorem of all of mathematics.

    4. Re:Russell is doing just fine, thank you by kaffiene · · Score: 1

      Exactly. Russell's failure was a major blow to mathematics and a certain kind of philosophy. At the time it was no where near as minor a hiccup as the OP commented,

    5. Re:Russell is doing just fine, thank you by kaffiene · · Score: 1

      AI presents a class of program which to achieve its goals ought to be able to be self referential.

    6. Re:Russell is doing just fine, thank you by cow-orker · · Score: 1

      So what?!

      "Able to be self referential" is different from "indeed self referential", which is again different from "equivalent to a Gödel sentence and therefore undecidable".

      Thanks a lot for understanding nothing and throwing buzzwords around.

    7. Re:Russell is doing just fine, thank you by kaffiene · · Score: 1

      Don't be so fucking obnoxious.

  96. Spec as design vs. spec as milestone - see C++ by alispguru · · Score: 1

    The C++ specification, by contrast, is both a good spec and a bad spec.

    The good part is the core of the language, which was primarily done by the committee ratifying existing practice. Read Stroustrup's Design and Evolution to see how the process worked.

    The bad part is the STL spec, which was done in advance of settled, working implementations for templates. Templates in C++ are still dicey across implementations, and having a spec to aim at hasn't helped since the spec is a design document, not a codification of existing practice.

    The Common Lisp spec was for the most part codification, which is why it's so good. The only place it got out ahead of community standards was CLOS, and they were smart enough to not standardize the MOP, which would have been even more premature.

    Bottom line - specs as documentation of existing practice are good, specs as design documents are not good.

    --

    To a Lisp hacker, XML is S-expressions in drag.
  97. Problem I see here... by Pecisk · · Score: 1

    I'm working now on some large projects and have to say - to keep specification up to date, corrected, in good shape, it requires ONE man only for that purpose. Until heaven opens and money starts pouring down on us, forget about it - software projects are usually money-stripped and they simply can't afford that. It is reason for:
    * bad drivers;
    * bad driver specs;
    * UNwritten driver specs (forget about whole IP thingy when ask hardware guys about specs - they simply can't afford people to write it, it is very silly indeed, but mostly true);
    * apps don't act like they should do;

    Problem with specs is lack of reality in expectations and managers who doesn't have a clue how important is API, specs, etc. documentation;

    Yes, there are well kept, in good shape specs - but usually not for hardware (what Linus actually has talked about).

    --
    user@ubuntubox:~$ stfu This server is going down for shutdown NOW!
  98. Specs must reflect the problem space by Anonymous Coward · · Score: 1, Insightful
    Specs and their utilization MUST reflect the target problem space. Some examples:


    • Aircraft control, rocket control, Space Shuttle - very detailed specs that spell out EVERYTHING and that are designed for both coding and testing
    • Industry standards - must be followed for interoperability (ever heard of Microsoft and Kerberos)
    • Contracting (developing a widget for hire) - detailed specs with lots of SHALLs because if it is not clearly spelled out (not a SHALL) it will not get implemented.
    • Internal development (IR&D) - less formal, more marketing driven and flexible.
    • Web development - unless it is done under contract, specs are not as necesary.


    The usefulness of specs is also LARGELY dependent on the author of the spec and their experience. Some organizations write fuzzy specs that leave a lot of wiggle room. A contractor implementing the spec then delivers a blue widget, not green because it was not clearly spelled out (not a SHALL but a SHOULD). This results in expensive engineering changes (ECs) resulting in cost overruns, budget shortfalls, and late products. Of course, if you are a Government contractor, this means you make more $$$.


    Often engineers who are running projects dislike specs and believe them to be a waste of time. The development team must then attempt to work without a spec but must still work toward a goal with some internal plan and list of objectives. When the customer asks why the project is not doing A when he thought it was doing A, the development team has less ammo to defend themselves.


    There are MANY examples of bad projects, cost overruns, and late products. The Government contracting area in the US has MANY examples (not just $500 toilet seats). Of course, the defence contractors get richer as they get to do it twice!

  99. Sound of one hand clapping by kronocide · · Score: 4, Insightful

    This is obviously the rant of a person who has never programmed for an actual client (a human one). 99% of the time a spec is the understanding between the user and the provider, whoever they are. So yes, Torvalds is right that they are mainly for talking about software, but unless you are writing your own operating system on your free time, you have to be able to talk about it or you will implement something other than what the client thought they paid you for, and then they get sour. Specifications are about understanding and communication, when not the whole universe is inside one person's head.

    Moreover, Torvalds doesn't really seem to know what science is. There just is no criterion that a scientific theory has "no holes." It doesn't work that way.

    1. Re:Sound of one hand clapping by Anonymous Coward · · Score: 0

      This is _the_ most insightful post here. Writing specifications is about getting agreement and concensus between (potentially competing) groups; between a client and a developer, between developers working together, etc.

      Linus has the luxury of being a dictator for the total of his programming experience. He's lucky -- most of us would kill to be able to dictate w/o any form of accountability or agreement of the person paying for the software.

    2. Re:Sound of one hand clapping by dubl-u · · Score: 1

      Specifications are about understanding and communication, when not the whole universe is inside one person's head.

      For a lot of projects, there are much more efficient means of understanding and communication. Extreme Programming, for example, puts all of the people who matter together in one room. Good writing is very hard, and good group writing is harder still. But people have a lot of natural skill in achieving understanding and communication in person.

    3. Re:Sound of one hand clapping by kronocide · · Score: 1

      You make it sound as if people are never in the same room in traditional projects. :-)

  100. In other news by justins · · Score: 1

    Most hardware vendors say "no" to Linux.

    --
    Now before I get modded down, I be to remind whoever might read this that what I am saying is FACT. - bogaboga
  101. Depends what the definition of "is" is... by Mr.+Underbridge · · Score: 5, Insightful
    From my impression of the discussion it isn't specs he is against, but rather following those specs without being flexible enough to take reality into account.

    From what I read, it seemed like people were trying to get him to soften his stance on that, and he seemed pretty adamant that he hates specs in any form or fashion.

    Of course, it's easy to do that when you're Linus Torvalds, and whatever you say/do is the de facto standard without the need to write a spec. He's basically a walking spec. However, I'd invite him to consider what would happen if all the peons adopted his theory. Nothing would interoperate with anything else.

    The only thing I can think of is that he defines a spec as something that is inherently written once, before implementation begins, and is strictly adhered to no matter what. However, I don't think any sane person would agree with that definition, I can't imagine that's what the other people in the thread meant by the word "spec," and I can't believe he'd imagine anyone else defending such a process in the first place. So I do believe that Linus is being a bully again.

    1. Re:Depends what the definition of "is" is... by penglust · · Score: 1

      The only thing I can think of is that he defines a spec as something that is inherently written once, before implementation begins, and is strictly adhered to no matter what. However, I don't think any sane person would agree with that definition Unfortunatly I have worked for in a number of insane situations if this statement is true. Where I work now specs get commited to some archane saving place. No development can get going (officially) until they are in and automagically placed on the intranet. Getting one updated requires several forms, appovals, etc.
      Needless to say I will not be here much longer but I beleive the Linus' point is that specs almost never get modified once they are set or the modification is painful.
      I first I thought it was strange that hardware did not seem to be as big a problem with this. But then I realized that hardware, even when it conforms to some spec, is inherently propriatary. Software, even if Microsoft does not want to beleive it, must mostly interact with other software. And it must conform to the proprietary nature of the hardware. It tends to get complicated quickly.
      Linux is the prime example, as Unix was in the past, of an evolved software solution. Many of the major steps involved morphing the kernel to a particular purpose. Each bit of code gets changed again within a short time span. Trying to keep specs on this is pretty imposible.

  102. Re:If specs are 100% accurate,then they are the co by _DangerousDwarf · · Score: 1

    These examples you provided do not illustrate why specs are useless. The post illustrates why the waterfall methodology of developing software is crap.

    If you had of released the software in several milestones each one of these issues would have been noticed by the customer, and you could have resolved them much cheaper. agree, no spec is 100% correct, people make mistakes, hell the market place could change. This is why the Agile methodologies preach releasing software incrementally, in small iterations.

  103. Seems hes misunderstood... by segfault_0 · · Score: 1

    Writing the first implementation of software from a spec is stupid, period. Hes right - its doesnt work. But once you have a reference/initial working implementation, a spec can be a useful reference for other software vendors for the purpose of ensuring interoperability. I guess my point is that I see a spec as an output, _not and input_, of the original development process.

    --

    I was crazy back when being crazy really meant something. (Charles Manson)
  104. Not 100% true. by Paul+Crowley · · Score: 4, Insightful

    If specs were 100% accurate, then there would not be a need to write the code, because the specs could be automatically translated to code (we are talking about 100% accuracy here, not 99.999999%).

    This is not true in general. It's quite straightforward to spec out a program that solves the Halting Problem, for example, but rather harder to code one. And there are issues to do with optimization and so forth that would not appear in a specification.

    Nonetheless, there's a great deal of truth in what you say - for most real-world programs, a 100% complete formal specification of what they had to do would not be much shorter than the program itself. This is why agile development methodologies make sense.

  105. Starts with defined behavior, change as necessary by mdarksbane · · Score: 1

    It's been my experience that you need some sort of spec, otherwise the behavior of your program is defined by what features are easy to implement, not that which are easy to use. Anything that needs to be written for has to have a clear theoretical specification that the code adheres to rigorously, or anyone using your program will waste more time than the darn program's worth.

    However, having more than just a general design when you haven't started fixing the problem and have no idea what the actual hangups you're going to run into are generally ends up with a program that isn't what you actually needed in the first place.

  106. Specs writen before code ARE useless by asrc · · Score: 2, Informative
    Specs written before code ARE useless, for software is far too complex for humans to be able to describe accurately without having explored the problem space in a formal way (for example, by coding it, at which point the code becomes the spec).

    The OSI layer was (and, for the most part, still is) a pre-code spec. Most successful specs, in particular IETF specs such as the TCP/IP suite, are *post code* specs; they were written after or concurrent with code that implements the spec (this is an IETF requirement).

    Specs written before coding commit software development projects to a higher degree of complexity in a single stage of software development (specification). This additional complexity results in an increased risk of software defects in that stage and in later stages, and, independently, increased costs to implement and maintain the software.

    Simplicity rules software development. Software projects succeed or fail exactly because they do or do not prioritize simplicity first. Humans are cognitively mal-adapted for comprehending non-simple systems. Exploring the spec formally (by coding it) helps humans understand complex systems. Specs are not bad, so long as that spec is code.

    These are some of the tenets of Agile software development.

  107. Bugs vs. Features by Khelder · · Score: 1
    In the absence of specs, bugs are indistinguishable from features.

    I haven't read all the comments (who ever does?), but I wish I had mod points, because this is the most insightful comments I've seen on this post.

  108. Think about it by synthespian · · Score: 1

    Do you really want software made for medical devices, airspace industry or nuclear industry, or the military, done with that philosophy ? I guess it is to bad that one of the main developers of operating systems today thinks that way.

    Part of the problem lies in this overuse of C/C++ software and Algol-derived languages. Better languages are available today. Part of the solution is to move away from this dependency of C, without necessarily dropping C. An example is how OCaml was used to formaly verify the C code in the Airbus A340 fly-by-wire system: http://www.astree.ens.fr/ The Linux kernel seems to me like kid's play compared to an Airbus. In hard engineering disciplines, you are not entitled to an "opinion" like Torvald's.

    Specs are for real. Lack of formal design of software has lead to the current situation of where a whole industry revolves around bugs. Increase in the use of formal methods is expected to rise, and Microsoft already has hired quite a few smart people (but they have that huge backwards-compatibility problem).

    --
    Main difference between the BSD license and the GPL license: one is from California and the other is from Massachusetts
  109. Linus Rocks! by smilindog2000 · · Score: 1

    As a code monkey since 1981, I have yet to see a spec worth writing on any software that had not yet been written. Good specs are really just documentation of what already works. Bad specs are carefully crafted theories by brilliant people in committee. To design a great piece of software, you have to get your hands dirty.

    --
    Beer is proof that God loves us, and wants us to be happy.
  110. Easy for him to say by dazedNconfuzed · · Score: 1

    Linus is in the rare position of creating that which pretty much defines everything else. He can pass on specs because (a) he understands the whole system so well that he intuitively knows what is correct, and (b) whatever he writes and chooses to release IS the defining component to which everything else must comply.

    Specs are most needed when (a) the task is much less than perfectly understood by those involved, and (b) the result must comply with something else which may not be completely understood - realities which 99% of programmers must live with. Linus gets to be part of the 1%.

    --
    Can we get a "-1 Wrong" moderation option?
  111. Authors of scientific theories welcome debate. by SumDumFloridaGoy · · Score: 1

    I was sad to see Linus choose the path of demagoguery and shout down opposing viewpoints. It's ironic that he used scientific theory as an example, because that isn't how it works at all. Authors of scientific theories welcome criticism because it allows them to work out kinks and strengthen their arguments. That's why papers are written in scientific journals for peer review. This is how software design methodology is supposed to work as well. Yes, a "spec" is an approximation of reality, but as that reality is discovered during the development process, the spec should be changed to reflect it. Unfortunately, refining the specification often means moving back deadlines, which affects promises made by business leaders. That's the reality of designing software. I think Linus is frustrated with the dysfunction often associated with the process and has identified his frustration with the process itself. It's absurd to say that software should be written by the seat of the pants. The failure of that model is what has caused software design methodologies to be created in the first place. Linus should know better than that.

  112. In the words of Terry Pratchett by hey! · · Score: 4, Insightful

    "Rules are there to make you think before you break them."

    Simple expertise is knowing the right thing to do. When you go beyond that to knowing when its the right time to do the wrong thing, then you have mastery. So, when somebody who has years of mastery of a craft says, "the rules are crap" it has a different truth level than when somebody who's merely competent. The difference is the way the right thing to do is backed by unspoken, unarticulated working knowledge in one case, and mere bravado on the other. I can do basic carpentry, but the difference between me and a master cabinetmaker when building a book case is that I have to keep referring to my plans, whereas the cabinetmaker, while he may have plans, operates more unencumbered by them, moving quickly and confidently because he's internalized longer sequences of operations, until he can see the whole construction process in his mind's eye. When I don't worry much about my plans, I end up with a dado on the wrong side of a plank.

    Being "against specifications" of course is stupid. But Linus is in an unique position to be a bit cavalier, isn't he? Specifications do two things. First, they tell you what needs to get done. Second, they communicate this between parties, say the specifier and implementor, the customer and contracter, the builder of tab-a and the constructer of slot-b. But Linux is, if I understand this, a pretty conservative implementation of an existing model, where innovation where it occurs is fairly contained and focused areas. And as far as Linus and the Linux kernel is concerned, L'etat c'est moi. He may well have managed all these years keeping what needs to be done in his head, and the result could still have more coherence than the product of a well coordinated committee.

    The other thing to keep in mind is you can't trust everything anybody says is categorically so, even when that person is perfectly honest and sincere. The simple reason for this that mosts truths have an element of fuzziness in them. In limited circumstances it is sometimes necessary to hold what is, in general more false than true, but in this case more true than false. Wisdom is knowing when and how much to doubt what you believe, or believe what you doubt.

    --
    Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    1. Re:In the words of Terry Pratchett by epine · · Score: 1


      There was a study that showed that the human brain is hard-wired to respond to certain types of emotional content in the environment (anger, hostility) and that it is very nearly impossible (for the general population) to suppress this.

      There seems to be a similar effect at work concerning social explanations. In any situation where there is a social explanation (Linus exists in a special circumstance) it seems as if a dominant segment of the population becomes incapable of exploring the alternatives.

      Which came first? Linus's privileged role, or his talent / aptitude / being in the right place at the right time / judgement / whatever? If his role derives from his talent and experience, then does his role explain his attitude or does his attitude explain his role?

      He might now be in a privileged situation. And it might not matter at all to the question at hand. There are two ways to ignore a standard. One is careless neglect (those requirements bug me, I won't read it) and the other requires extreme competence (that feature will mess up a lot of other stuff, but if I obey exactly these portions, then I won't break much existing code, and everyone can get along with the result, and we won't poison our system with massive breakage in getting there).

      A spec. is a great substitute for murky thinking, and a terrible substitute for clear thinking. Linus seems to believe that clear thinking is not possible without paying close attention to the reality at hand. If one is paying close attention to the reality at hand, and thinking clearly about what remains to be accomplished, a spec. serves in an advisory capacity at best.

      I've never read a spec. of any significance that didn't at some point say step 2: tie your shoelaces together and proceed down stairs. The most sophisticated specs. encourage you to do this without realizing what's going on until it's way too late.

    2. Re:In the words of Terry Pratchett by epine · · Score: 1


      Example after the fact: Peter Gutman on X.509.

    3. Re:In the words of Terry Pratchett by hey! · · Score: 1

      A spec. is a great substitute for murky thinking, and a terrible substitute for clear thinking.

      Excellent sig material,by the way.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
  113. He's probably right... by jounihat · · Score: 1

    I didn't read the article, and in fact I don't have a clear opinion about this thing, but one thing is for sure: in all these years, about 100% of all the engineering/kernel development arguments Linus has stated have sooner or later proven him right. So I'll just slip to the safe side, and agree with him totally. Spec no.1: Linus is always right. Wait a minute...

  114. Math; by Mark_MF-WN · · Score: 1

    Strictly speaking, "computer science" is a branch of mathematics. So no, it isn't a science. Sciences are inductive and empirical, whereas mathematics is deductive and rational.

    1. Re:Math; by Lodragandraoidh · · Score: 1

      Obviously you have not worked with production computer arrays and software where 'deductive and rational' does not necessarily apply.

      Finding bugs in software and hardware can be likened to Scientific investigation - where the researcher controls the number and quantity of inputs so as to focus the results on meaningful data - which may or may not lead to a meaningful conclusion, leading the investigator to devine the meaning from incomplete data.

      Creating and integrating multiple systems on a large network is also not clear cut, and many times unknowable interactions between various pieces of equipment on a hetrogenous network break calculations.

      At a lower level the hardware itself can be used to postulate new techniques and validate the science surrounding semiconductors and other emerging technology involving the interactions of various materials and its application to computer technology.

      So I think it is safe to say that, outside of some simple applications, computer science is indeed a science.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
  115. At last: Common sense by sdokane · · Score: 3, Interesting

    (1) Copying the engineering profession does not mean that suddenly all the problems associated with software will disappear. Engineering systems are frequently late and over-budget. I can name a few hi-profile examples: the Millennium Dome (UK), the Jubilee Underground Line extension (London), the "wobbly" bridge (London), the Sydney Opera House. The first 3 were "vanilla" projects - there was no real excuse for failure.

    (2) Specs don't correspond will reality because they frequently use hand-waving to achieve functionality. That's what high level design does. If it filled in all the detail, it would not be high-level design. High-level design nearly always misses detail that emerges in implementation, because the only way to discover that detail is (1) to do the implementation, or (2) have a (non-human) ability to see the consequences of every design decision.

    (3) If a design methodology is complete enough so that it does not use hand-waving, then the level of design has the same level of complexity as the implementation. Having used UML for many years, I have seen it grow so that now UML editors have so many icons, shapes, dialogs, that quite frankly I'd rather go back to code. The spec (and the language used for the spec), if it has the same level of detail, only adds complexity by hiding it and organising it in an artificial manner.

    The future of software, I believe, lies in good libraries. They encompass the experience of programmers in particular domains. I use the example of ASP.NET. Applications written in ASP.NET are more robust and faster to produce that those written in ASP, and the ASP application are more stable and faster to develop than early applications written in CGI (generally). The same holds true for applications developed using different generations of Java etc.

    1. Re:At last: Common sense by DerekLyons · · Score: 1
      Copying the engineering profession does not mean that suddenly all the problems associated with software will disappear. Engineering systems are frequently late and over-budget. I can name a few hi-profile examples: the Millennium Dome (UK), the Jubilee Underground Line extension (London), the "wobbly" bridge (London), the Sydney Opera House. The first 3 were "vanilla" projects - there was no real excuse for failure.
      The problem is in your 4th (and undiscussed) example, the Sydney Opera House, wasn't really an engineering process. An artiste generated a set of wonderful drawings - and they were accepted as the goal *before* anyone actually asked if they were practical within the envisioned budget. A closer metaphor for software development within real world engineering you couldn't find.
  116. I think the point is .... by Ex-MislTech · · Score: 1

    I think the simple point is, to innovate you sometimes have to think outside the box .

    Web standards for compatibility so browsers work right is needed, but standards
    and specifications are not exactly the same thing, and sometimes the web may need
    to break new ground that redefines old standards .

    Specs are a box in a way, and all ppl come at a task from all the different angles
    from their unique perspective . We all do not see "it" the same way .

    The code is shared open source, and the subroutines that are most widely adapted due to their
    cross platform adaptability or mutual interoperation are the ones that rise to the top .

    This is practice making product, and how alot of open source mutated to become
    the libraries/SDK's/scripts that are now used by the majority .

    If you want ppl to come at programming issues from new, and unexpected angles, and to
    boldy go where no one has gone before .

    Lose the box .

    Peace,
    Ex-MislTech

    --
    google "32 trillion offshore needs IRS attention"
  117. Some quotes from another POV by synthespian · · Score: 1
    There are many ways of trying to understand programs. People often rely too much on one way, which is called ``debugging'' and consists of running a partly-understood program to see if it does what you expected. Another way, which ML advocates, is to install some means of understanding in the very programs themselves.

    -- Robin Milner in
    The LittleMLer

    The "standard", non-functional programming languages like Fortran, Ada, and C are the bastard progeny of the coupling between a pseudo-mathematical notation and a von Neumann-style random access memory (RAM).

    -- Henry Baker in
    Linear Logic and Permutation Stacks--The Forth Shall Be First
    --
    Main difference between the BSD license and the GPL license: one is from California and the other is from Massachusetts
  118. Spec is always important by stalve · · Score: 1

    I think what has happened here is that one guy is talking about the fence while the others are talking about the hole in the fence (figuratively speaking). In other words -- "a spec" does not mean the same thing to Linus than it does to others. That is perfectly normal -- actually it is impossible for different people to understand a concept in an absolutely same way. It is so because different words have different associations in different minds and that's a fact.

    However, both sides are right! For Linus, it seems, a spec is a general outline of the program that is made before any actual coding is done and Linus obviously knows that people often think spec has to remain unchanged ever since. Linus insists that You cannot write good software if it is based ONLY on such initial theoretical assumptions and models unless the theoretist is a real genius (can foresee all possible problems). Let's assume most people are not geniuses. So, if You have a project and You have initial spec, then desperate clinging to Your initial spec during realisation phase (coding etc) will ultimately take You to a situation where You do not want to be: everything works as it should but it doesn't serve it's intended purpose or even worse -- nothing neither works nor fits together because the creator of the initial spec didn't had a clue what it was all about. So, what Linus says, is that if You think that for building good software all You need is an initial spec, then You are living in a dreamworld.

    What Linus left unsaid was, that a good spec always evolves during implementation (coding etc).

    I do not believe that any programmer is capable of writing software without an initial spec -- having an understanding of the goal, it's subgoals and the way leading there. It doesn't matter, if this spec is in the form of paper, file or thought, it is always there.

    What the opponents of Linus are talking about is knowledge about the inner workings and standards for input and output of the program. It is self-evident that no-one can tell with 100% certainty what will software be like before goals are reached and development has been ceased. In that sence, a spec in essence is linkage of initial theoretical assumptions with the results of implementation. For Open Source Community, the availability of such knowledge is crucial. I will not talk about business collaboration, since successful businessmen have already recognised the value of intellectual capital and the need to accumulate it -- as of that business world is way ahead of OSC.

    I think Linus might be worried about his own work and might be reluctant to share the real essence of his work with the public -- to keep the rabbit in the hat, so to speak. I think it's up to Linus, whether he wants to show how his mind works or not -- his contributions are big enough. In general, a person who does not create specs for his or her own work, should not waste time writing Open Source Software. It is a burden for other developers in the OSC.

  119. Re:If specs are 100% accurate,then they are the co by Anonymous Coward · · Score: 0

    Carvature is such an awesome word, I'm going to start using it as often as possible.

    The carvature of that turkey was exquisite!

    Grandpa's whittling expresses the subtle depression-era emotions in its fine carvature.

    Our new marketing plan will be the carvature necessary to get a foothold in the widget industry.

  120. Here's an example by Tom7 · · Score: 1

    I can generally agree with Linus that English-language specifications are hardly ever good enough to build software around. I can think of at least one notable example that is both large, useful, and accurate: The Definition of Standard ML defines the programming language SML in a way that is very accurate and thorough, to the point that the specification is almost machine-executable. (Indeed, a project is currently underway at CMU to formalize an alternate version of the definition in Twelf, and mechanically prove it correct, which would really make it machine executable.) Because of this spec, SML has several compilers that are impressively compatible, and where they differ, it's almost always clear who's right and who's wrong. (To be fair, there are some known mistakes and ambiguities in the published version, which is one of the reasons for the machine-verifiable version in development.)

    The real problem is that specs are hard, I mean, way harder than writing software that more-or-less works, like linux does. If you believe "worse is better", then maybe specs aren't necessary. If you believe that it's worth the time to make sure you're really doing something right, it is possible to write specs that are accurate and useful, and that can be helpful to collect your thoughts outside the warzone of source code, and reason abstractly about the program that you intend to write.

  121. "Denormalization" of specs by alucinor · · Score: 1

    Specs are good as a starting point (as Linus said, for the "talking" phase of development). But once you start implementing your specs, you have to denormalize them in much the same way as a database cannot practically be completely domain-key normal form -- the reason is almost always performance or ease of implementation.

    Or say you were working on a healthcare enterprise application, and you thought, "Gee, wouldn't it be great if we composed our model layer to reflect HL7 specifications?" But in reality, you would end up with a hugely unoptimized and impracticle system with massive numbers of object references.

    And this is one reason why I somehwhat dislike purely OO languages -- sometimes, an object isn't what you need best. But OO purists, with theory in mind, will always want to make ~everything~ an object.

    --
    random underscore blankspace at ya know hoo dot comedy.
  122. A bit of both and where's the prototype? by Midnight+Thunder · · Score: 1

    While the totally spec-less approach is not good, neither is the over speced approach. How much of each all depends on the project at hand and also what supporting tools are available.

    Many people say that engineers do everything by spec, but this is not altogether true. If you are talking about the production of the final product, then yes they do. But before that there are usually prototypes that get developed, modified and tweaked, trialled and so on, until a suitable solution is worked out.

    This is where software differs. How many times have you seen a company build a software prototype, build a spec based on what was discovered and then build the final product? In nearly 100% of the cases that I have seen there is no prototype, so the final product is a prototype onto itself, but one that is worked on until it becomes a final product. While a spec can layout the essential design and even at some points make a good job of making the product work, if they aren't modified to reflect the changing realities, then their is an issue.

    Remember you can have a grand design that looks good on paper, but performs terribly in reality. On the other hand you could start coding straight away and be so swamped that your realise a road-map would have been useful.

    --
    Jumpstart the tartan drive.
  123. Moron. by CaptainPinko · · Score: 1

    Frankly, I've disliked Linus(from what I know of him) for a while now. Sure I love Linux (running KDE on Gentoo) right now but I've considered him an idiot for a while now. There is this incident for example. Or his inability to understand the value of a stable API. Also I remember him dismissing switching over to C++ because they tried it once and found it too slow and hard to program in. Fine, don't use C++... but considering apparently this attempt predates the standardisation of C++ not to mention the advances of C++ I'm tempted to mark that comment as a troll. Not making the files drivers need to hook into LGPL and making binary drivers realistic is a toss-up but I think it's unreasonable. When he decided that stabilising the kernel was for distros to do... well to me it sounded like "I just wanna do the fun parts... let someone else handle that." There have been other complaints that the kernel was marked stable before it truly was and that he is unwilling to let a 'stable' kernel bew stable. Really, I wish ppl would just start using one of the *BSD kernels. I wonder how long it take for RedHat to start using the FreeBSD kernels. Considering how many kernel hackers they employ it seems like they could smoothe out the wrinkles in FreeBSD.

    --
    Your CPU is not doing anything else, at least do something.
    1. Re:Moron. by petrus4 · · Score: 1

      My biggest beef with Linus was his brilliant idea of putting the kernel under the GPL in the first place. Thanks to that move, anyone who wants to use Linux now also has to be saddled with Mr. Personality and his Legions of Doom.

      That however is only the biggest problem. It's not the only one. Because of several things however, I've done this where Linux is concerned. If I ever use a free UNIX again in the future, it will probably be NetBSD...although in order to avoid these types of problems recurring, I won't be having anything to do with it's developers, either.

      I no longer look forward to the day Microsoft goes bankrupt, if such a day comes. Linux is a system written by and for autistic juveniles, and is not going to be remotely close to being ready to replace Windows until that fact changes. I hold out scant hope, however, that it ever will.

  124. Linus on Gates by The_Quinn · · Score: 1

    If Linus is anti-specs then I wonder what his stance would be on Microsoft extending and/or breaking specs in their software development.

  125. Freenet by N3wsByt3 · · Score: 2, Interesting

    Specs are crap?

    I guess that's why the Freenetproject never had good specs! ;-)

    And it pretty much seems a worthwile pursuit, seen the current almost-specless development of the 0.7 version.

    Ok, the start was there, but it doesn't seem to get any further, even after several months.

    --
    --- "To pee or not to pee, that is the question." ---
  126. There's a difference between interfaces and specs by alucinor · · Score: 1

    It seems a lot of people here are basically thinking that by Linus dissing specs, he's dissing interfaces, protocols, and other standards.

    I think he's mostly complaining about specs that try to enforce particular models on distinctive software components.

    A spec for a particular component might give you a jumping off point, but in reality, you're going to have to tease and experiment with some code first to know exactly what you're going to do. Hasn't anyone ever heard of "iterative development"?

    No one is a soothsayer, and good coding, while it should involve adhering to standards for ~communication~ between modules, should always keep machine and human efficiency first, above theoretical correctness.

    --
    random underscore blankspace at ya know hoo dot comedy.
  127. Re:There's a difference between interfaces and spe by Mr.+Underbridge · · Score: 1

    I agree wholeheartedly, but I really don't think anyone in the thread was contesting the contrary. At worst, Linus is insane, at best, a pedant. In this case, anyway.

  128. SQL by Anonymous Coward · · Score: 0

    (didn't RTFA, but Linus made blanket statements that are quoted in the article that led me to think....)

    A whole bunch of really useful software has been written that is ALL now playing catch-up to the standard. Sure, some parts are completely ignored, but generally, it is the standard for databases and the only reason they play nice at a basic level. There is no incentive for any one database company/project to adopt anyone elses protocols and standards, but if there is a univerally accepted spec that is demanded by users, they have no choice. Of course they all extend it, but they also all conform to it in varying degrees. You can create objects, insert data, and select data on any database with the exact same commands. That's pretty useful. It is due in no small part to a spec.

  129. Just friggin GREAT by gosand · · Score: 1
    Oh, this is great. Now we are going to get all the noob devleopers who have the attention span and reading comprehension of a 6 year old parroting "We don't need specs. Linus said so on Slashdot."

    Having been in software development for 12 years now, I thought "he is crazy". But no, once again his comments are taken out of context. Let me summarize, for those 6 year olds: if you are a kernel developer, don't blindly follow a spec. Linus does not speak for all of software devlopment, nor all software projects. If you take his word as gospel you are a fool. I see two real problems in the industry:

    1. People want to call themselves sofware "engineers" yet they don't have any inkling of what engineering is. They are programmers. Engineers don't scoff at specs and hack stuff together at the last minute. And I don't think every piece of software needs to be engineered, in fact most probably don't. But don't call yourself an engineer if what you do rejects everything engineering is about.

    2. If you have seen a well written spec, you would know that they are invaluable. The problem is that you have the wrong people writing specs, or that you don't give the right people the time to write them. Get the crap out the door as fast as you can. If it is broken, we'll fix it later. Someone new on the project? Sit with them for 10 minutes and explain EVERYTHING to them. Then throw them into the fire.
    And for the record, I barely remember the last time I saw a decently written spec. I'll bet it was about 8 years and 3 companies ago.

    --

    My beliefs do not require that you agree with them.

    1. Re:Just friggin GREAT by Anonymous Coward · · Score: 0

      I don't think 6 year olds should do kernel development, personally. Better they focus their efforts on website design and Microsoft-based video codecs.

  130. I think it would be more accurate to say by geekoid · · Score: 1

    that a spec carved in stone and not thought about as each piece is wrritten and tested is useless.

    Sorry Linus, I have seen specs used very well, and even be rellevant 5 years later.

    If a software writer can not keep specs and documents up to date, they are a hinderence.

    I have seen a lot of software that never had a spec, and all of that was terribble written, and incredibly hard to maintain.

    OTOH you have more fingers.

    --
    The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
  131. Linus has gone off the deep end. by jistanidiot · · Score: 0, Flamebait

    Between this and the stupid trademarking of the work Linux, I think Linus has gone off the deep end. Without specs, no one will know what to expect out of the system. If the system does Y, that's all well and good. But If the the specs that say the system should do X then you've got a major problem.

    It is time to remvoe Linus from the project. He is seriously starting to hurt the open source community.

  132. Medical.... by Achra · · Score: 2, Informative

    Okay, that may work fine for linux and commercial software, but what about more critical software fields?
    Are you seriously saying that all top down specs are bad? I've worked in medical for a long time, and I really doubt that you, me, or the FDA would much appreciate a heart pump that was written from the "bottom to the top".
    Specs are there for a very good reason (at least in critical cases). Also, they are absolutely critical in cases where a contract house is building a product for another company. They are the only way to in the end say, "See, here is what you asked us to build. It is perfect in every sense to your spec. Check please."
    If I want a heart pump, the very first thing to do is decide what I want. That's a spec. Next comes the hazard analysis, that's a spec too. and on down, until all of the hazards are mitigated and you have a heart-pump that isn't going to do anything unexpected.
    This may be an unpopular view in open-source development, but it's certainly a realistic one.

    --
    Each processor would proceed sequentially as if it had been better for them not to rise against Saul.
    1. Re:Medical.... by dubl-u · · Score: 1

      Are you seriously saying that all top down specs are bad? I've worked in medical for a long time, and I really doubt that you, me, or the FDA would much appreciate a heart pump that was written from the "bottom to the top".

      Isn't it funny the original heart pump, the one that people are born with, was put together exactly that specless way. And it lasts longer, is more efficient, and has lower failure rates, too. I wonder if we could learn something from that?

    2. Re:Medical.... by Achra · · Score: 1

      Perhaps...

      I envision a project timeline as such:
      http://library.thinkquest.org/26157/timeline.html

      --
      Each processor would proceed sequentially as if it had been better for them not to rise against Saul.
    3. Re:Medical.... by planetfinder · · Score: 1

      So if your heart fails and you need a heart pump its OK with you if they just use some shoot-from-the-hip programmer's software to run it ?

    4. Re:Medical.... by dubl-u · · Score: 1

      Between spec-driven development and a more modern process like extreme programming, I'd take the latter. What XP and evolution have is many iterations of vigorous testing and incremental improvement. Spec-driven development lacks that.

      If you spend time interviewing people in regulated fields, you'll find the paper trail isn't really about getting quality. It's about assigning blame (and therefore legal liability) when something bad happens.

    5. Re:Medical.... by planetfinder · · Score: 1

      Extreme programming does not forgo specifications.
      www.extremeprogramming.org

    6. Re:Medical.... by dubl-u · · Score: 1

      Sorry, you're wrong. The standard XP way to organize the work is with a stack of index cards, each of which has a short phrase written on it. Those are tokens for conversations between the product manager(s) and the developers, who are all in the same room. No specification is required, and traditional spec documents are energetically discouraged.

      Instead, the knowledge of what the product should be is recorded in the acceptance tests, which are written in parallel with the development. Some XPers will refer to these as "executable specifications", as that makes people more comfortable and underlines that they solve for the same problem that a lot of people try to solve with specs. But their effect is radically different than the big-spec-up-front approach that most people mean when they talk about software specifications.

    7. Re:Medical.... by planetfinder · · Score: 1

      Sorry I'm right. You can't write software if you have no idea what its supposed to do. If you don't want to talk about it that way then that's fine. See you after your heart pump surgery.

    8. Re:Medical.... by dubl-u · · Score: 1

      Sorry I'm right. You can't write software if you have no idea what its supposed to do.

      This is true, but Extreme Programming doesn't require a spec to do that. Every XP coach I know generally discourages the use of written specs: there are other ways of communicating than documents.

    9. Re:Medical.... by planetfinder · · Score: 1

      "there are other ways of communicating than documents"

      This sounds way deep.

  133. Lets change some names... by Anonymous Coward · · Score: 0

    Of course, it's easy to do that when you're Linus Torvalds, and whatever you say/do is the de facto standard without the need to write a spec. He's basically a walking spec.

    Lets change some words here:

    Of course, it's easy to do that when you're Microsoft, and whatever you say/do is the de facto standard without the need to write a spec. Microsoft's actions are spec.

    Following a spec means you could code things wrong. Who wants to be wrong?

    1. Re:Lets change some names... by Mr.+Underbridge · · Score: 1
      Of course, it's easy to do that when you're Microsoft, and whatever you say/do is the de facto standard without the need to write a spec. Microsoft's actions are spec.

      Good God, does everything have to be about Microsoft? In fact, run with that - does Linus want to be like MS?

      Following a spec means you could code things wrong. Who wants to be wrong?

      Software that is "right" but doesn't interact correctly with hardware or other software is useless. There's a better way that involves writing software that works and is useful, but I think that process is sometimes lost on Linus. He is incredibly dogmatic, and is in the position of being the only person in the community who can get by with that "my way or the highway" attitude.

      For a good example of when refusing to settle petty differences goes wrong (due to spec-related issues), see the current situation with cdrecord. Linus is stubborn, Scilling is a pedantic ass, and right now we have a situation where kernels past 2.6.8 can't record cd's correctly without using either 1) ide-scsi, which is a dogcrap kludge, or 2) doing it as root. Fantastic guys, thanks.

  134. Another advantage of open-source software ... by Anonymous Coward · · Score: 0

    ... developing it requires little-to-no accountability, in many cases. Specs are evil, we all agree on that, but they also serve the purpose of forcing the end-user (whose wallet we're relying on in most cases) to define their needs, rightly or wrongly, so there's no misunderstanding over deliverables.

    Characterizing specifications as globally wrong is short-sighted and immature, really, and shows an astounding lack of understanding of how real-world projects must be developed to someone's idea of what they'll pay for.

    I know, I'm criticizing the holy Linus, and I'm going to get flamed in the ground, but c'mon ... we're not *all* stupid, we didn't all evolve towards project specifications because it was a completely flawed idea.

  135. To be clear... by Junta · · Score: 2

    Most people seem to be assuming he is dismissing software design specs, which has nothing to do with his discussion.

    His puported viewpoint is to be taken in the context of a hardware vendor spec on how to interface with hardware. There is a significant amount of truth in this. Hardware vendors will live by specs when they need to. I.e. they adhere to PCI specs, they adhere to drive-controller specs. They are careful about areas where they communicate on a bus or channel to arbitrary other vendor hardware.

    However, the interface between the OS and the piece of equipment will almost always have poor specs. They are usually designed at the start of the design of things, and then while working the reality shifts from the spec. Unless going for some sort of standardization (i.e. IETF and such), the spec is rarely updated even in the face of significant change. At that point the reference implementation is the only thing anyone is maintaining and the only thing that particularly matters.

    On the other hand, at least you know where they are coming from. Ultimately, an ideal world has a vendor releasing both specs and their reference implementation.

    --
    XML is like violence. If it doesn't solve the problem, use more.
  136. Missing the point: it's about hardware specs by greppling · · Score: 1
    Big parts of this entire discussion is completely off-topic. Linus is not talking about Specs that define what your software is supposed to do, when you have a customer, you of course have to agree on one and then implement it. He is talking about relying on hardware specs when you want your software to interoperate with actual devices.

    How do you think a BIOS is typically developed:

    • Reading the ACPI spec, implementing it, followed by extensive unit testing verifying that the spec was implemented correctly.
    • Browsing the ACPI spec, implementing it, then trying to boot windows until it works.
    If you write the Linus ACPI code according to the spec, you are betting that the first point above is reality. Not the kind of bet you would like to make.

    Of course, this example works as well with s/ACPI/HTML/; s/boot windows/load the page in IE/ etc. etc.

    1. Re:Missing the point: it's about hardware specs by CaptainFork · · Score: 1
      If you write the Linus ACPI code according to the spec, you are betting that the first point above is reality.

      That doesn't even remotely follow.

      OTOH if you ignore a spec that's available, you're betting it won't draw your attention to a mistake in your implementation.

  137. Pragmatism will always rule by smcdow · · Score: 1

    Specs are a nice thing in theory, but I have to agree with Linus' point.

    If there is to be a new "thing" (ie software component, hardware componenet, interface, or whatever), then we can do one of two things:

    1) one can sit down, study the problem a great deal, try to account for all edge- and corner- conditions, and attempt to write a spec which will deal with all these things.

    or

    2) one could start prototyping the "thing" immediately, ignore unecessary corner- and edge- conditions, bend semantic rules, etc., and get it working, and get it out the door into the {whatever-}space long before the other folks have even completed the spec. Since this would be the first "thing" that people will see, it becomes the de-facto standard (or at least the de-facto strawman) that everyone else will want to interoperate with.

    This is the reality. Software moves quickly. In case number 2) the strawman will be iteratively torn apart and rebuilt until a "real" de-facto "spec" emerges. And this will be the "thing" that every one will use.

    --
    In the course of every project, it will become necessary to shoot the scientists and begin production.
  138. Confusing 'inaccurate' with 'unneeded'... by Man+from+Trantor · · Score: 2, Insightful

    We always write to specs. Usually implied. Whether it starts as just a few lines on a cocktail napkin or it's an explicit interface definition, it's just a starting point; but a project without any is guaranteed disaster. I know that requirements gathered by comittee rarely translate into live code and I personally find that the best way to gather requirements is to prototype heavily, but you have to start somewhere. Every right-thinking programmer detests documentation; unfortunately there is no substitute for the waterfall. People may think they've just written the most brilliant piece of code ever, but if it's not spec'ed and coded to that, thier grand creation becomes just another pile of steaming spaghetti code to the next poor slob that has to deal with it.
    MfT

    --
    <!-- /. bot -->
    while(!am) r2();
  139. It's not about what "should" happen by roystgnr · · Score: 3, Insightful

    Why should I be expected to be the one to find the holes, just because they can't be arsed testing it properly?

    Usually you shouldn't, however you will. It doesn't matter if you're creating a web browser that can't display "broken-but-renders-on-IE" webpages, an IDE driver that may corrupt data on "UDMA-compatible-but-not-compliant" hard drives, or a server process that crashes on corrupt or malicious out-of-spec data: as long as your code is what's interfacing more directly with the user, your code will probably be blamed for the problems. In particular, if one of your competitors has found and worked around the holes, your code will definitely be blamed for the problems.

    It's not fair, but it's life: from a user's point of view it's easier to get new software than to communicate with a different set of people or buy new hardware.

  140. Re:If specs are 100% accurate,then they are the co by Kjella · · Score: 1

    If specs were 100% accurate, then there would not be a need to write the code, because the specs could be automatically translated to code (we are talking about 100% accuracy here, not 99.999999%). But specs can realistically never be 100% accurate...it is the missing part from the specs that causes headaches.

    Specs should, in my opinion, be a language-independent description of the task - not implementation, but structures and interfaces only. If ask you to transfer an XML document over TLS I don't care how you go about it - as long as you follow a valid XML structure and a valid TLS protocol. It gets slightly more hairy when you're dealing with hard real-time systems, but even then it should only describe fixed times or time windows. The difference is as fundamental as the difference between describing an orange and the process to grow an orange.

    --
    Live today, because you never know what tomorrow brings
  141. Freudian typing... by Whiteout · · Score: 1

    Specs are rarely useful breasts up-front.

    What *would* Sigmund say?

    1. Re:Freudian typing... by cloudmaster · · Score: 1

      Something about how, since he was a royally messed-up kid, he therefore thinks that everyone has the same fantasies as him?

    2. Re:Freudian typing... by Anonymous Coward · · Score: 1, Funny

      Proof-read

  142. Great Comment! I can quote your this in interview. by managedcode · · Score: 1

    I greatly appreciate it. Spec, Analysts and Program Managers made no sense in the world of Systems Programming. I have a refrence to quote now.

  143. Confirmed: Russell dies of hiccups by civilizedINTENSITY · · Score: 1

    Actually in the graduate math classes I've had, it was pretty much a given that the Grand Dream of Russell was shattered on the rocky shores of Godel. Seems like there was a crisis in Mathematics (due to Godel) as severe as the crisis in Physics (due to QM). It was said that before Physics could procede, a generation of Physicists would have to die out. Mathematics proved more resistant, embraced Formalism, and climbed into its navel instead. (Noteable exception: Tristan Needham's Visual Complex Analysis, also see the book's homepage.

    1. Re: Confirmed: Russell dies of hiccups by Anonymous Coward · · Score: 0

      That's absolute nonsense. There was no "crisis" in mathematics. Needham's presentation of complex analysis, as opposed to Conway or Rudin, is a completely different topic.

  144. Exactly. by Estanislao+Mart�nez · · Score: 1
    Linus has a skewed view of the software process because Linux basically has no new designs in it. All the "high level" (or as Linus would say, "theoretical") work behind that OS had already been done by earlier OS designers, most notibly the designers of various Unices. All Linus et al have done is to create new source code to implement these old designs.

    Indeed. My reaction was: "Says the guy whose life's work is, essentially, copying other people's original work."

  145. Re:If specs are 100% accurate,then they are the co by Anonymous Coward · · Score: 0

    You know what? the specs talked about UTM coordinates, but they actually meant MGRS![...]

    The specs did not say anything about the map display respecting the carvature of Earth. So we went out and implemented a flat model,[...]


    Here's a thought for you. When faced with a situtation where you're not sure what the client wants, how about you ask them. Oh, wait, you're sucking on goverment tit and you couldn't care less.

  146. The proof! by PowerPunk · · Score: 0
    they (thank God) admitted their mistake, paid us, and gave us time
    You gave the proof! Without specs the would not have paid you. So specs in requirements are usefull.
  147. Re:If specs are 100% accurate,then they are the co by dan+the+person · · Score: 1

    The specs did not say anything about the map display respecting the carvature of Earth. So we went out and implemented a flat model, where each pixel on the screen was converted linearly to a X, Y coordinate on the map.

    So there was ambiguity in the specs, they didn't state if they assumed a curved or flat model.

    And instead of spending 30 seconds to email or phone your client contact, and ask what they had assumed, you just thought you'd make the decision for them?

    Sure, if it's a tiny ambiguity that would take 5 minutes to reverse you just make an assumption and not pester the client every 5 mins. But for something so fundamental your crazy to just make up requirements as you go along...

  148. mod parent funny while... by cp.tar · · Score: 1

    ... I, for one, welcome our new glasses-wearing girl overlords.

    --
    Ignore this signature. By order.
  149. WDF by Anonymous Coward · · Score: 0

    Everyone know's that moderation is done by a script. Proof:

    Linux firefox good kill M$ bad OSX eat all CONSPIRACY! soviet russia assholes google google google BSDed BSD!

  150. SCSI specs by Jeremi · · Score: 1
    A spec defines how a protocol works and behaves. All SCSI specs are currently very layered and defined by FSMs.

    ... and my drives work much better now that they have been touched by His Noodly Appendage.

    --


    I don't care if it's 90,000 hectares. That lake was not my doing.
  151. It's because the field is so young by complexmath · · Score: 1

    and because of IP issues. The industry is resisting standardization to some degree because companies want to make money selling library code and the like. Personally, I relate software engineering today to pre-industrial tradework like blacksmithing. Most code for every project is written from the ground up and technical tricks are jealously guarded by many software houses (IP and non-compete laws now vs. less formal methods way back when). Eventually, however, the glory days will end as the average project size simply gets too large to be managed in such a manner. Particularly when software integrity becomes more of an issue. What will happen if the law changes such that all software must provide some stability and safety guarantees? As it is, things are abysmal. I've had to replace my last two cellphones (Motorola... never buying one again) because the firmware was garbage and they crashed and freaked out constantly. And cellphones are products that are expected to Just Work. What does that say about the rest of the industry? Calling the process an art is just a cop-out as far as I'm concerned. There's a difference between striving to build a flawless product and in embracing the flaws as a consequence of the artistic process--the latter group is just excusing their lack of skill or discipline.

  152. There are two types of specs. by Z00L00K · · Score: 1
    Good specs and bad specs.

    A good spec is one that states the goal of a certain issue and creates boundaries. However it doesn't tell you exactly the path to the goal but can give hints.

    A bad spec is a spec that goes too much into detail but doesn't set the outer boundaries. (Well THIS software needs a terabyte of RAM to work, since nobody told us that we only have 32 meg to work with!)

    Far too many projects have been started with bad specs. If a spec can't be summarized to an A4 page (or Letter for those who don't do ISO standards) it is time to sit down and think again. Of course it's impossible to get everything down on a single page, but you can create the basic boundaries. If the final spec is on more paper than you can comfortably put under your arm and have handy at all times - well, who do you think will read it?

    --
    If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
  153. Linus Taken to Task-Software engineering. by Anonymous Coward · · Score: 0
  154. He's talking about trusting hardware by iabervon · · Score: 2, Insightful

    He's not complaining about specs as a way of getting things to behave the same. He's talking about using hardware specs to base your software on. If you try to talk to your PCI hardware by following the PCI spec, chances are that it won't work, because a huge portion of PCI hardware doesn't quite work right. Someone had been saying that, in order to write a good SCSI driver, you should follow the guidelines in the SCSI spec, and Linus was saying that, if you did that, your results wouldn't work with a lot of real hardware that people use, and you won't be able to deal with these quirks, because you won't have designed your system to handle them.

    It's not about the development model at all. The situation is that Linux has to work with third party devices, where the spec is like a contract that the other party hasn't signed. You can do your part to be perfectly compatible, but when the computer's BIOS tells you impossible things, you can't go yell at them, because they don't really care, and the user still wants the computer to work.

    I personally wouldn't go on an airplane where the people designing it just trusted that parts perform the way the contracts specify. The most common area in engineering failures is to assume that, just because you say that something has to be done a certain way, it'll actually get done that way. I want my airplane designed such that, if a couple of the engines aren't aren't doing what the manufacturer claimed they'd do, the plane doesn't just crash. You have to expect that a certain amount of the stuff will misbehave, and the safety of your system really depends on just how much of it can misbehave before something terrible happens.

    In short, if you're producing SCSI adaptors, you should understand the SCSI spec completely. But if you're writing a SCSI driver, you should have a copy of the spec, but also a big database of how particular hardware violates it, and notes on what parts are unreliable in practice, because there are certain to be a lot of these.

  155. Re:If specs are 100% accurate,then they are the co by poot_rootbeer · · Score: 1

    So your customer gave you a bad spec, you developed a product that fulfilled that spec's requirements, and it was later discovered that they gave you incorrect requirements -- and you're blaming that failure on the SPEC rather than the CUSTOMER?

  156. Re:If specs are 100% accurate,then they are the co by p3d0 · · Score: 1
    If specs were 100% accurate, then there would not be a need to write the code, because the specs could be automatically translated to code (we are talking about 100% accuracy here, not 99.999999%).
    That's not true. If it were, then you could prove P = NP and you'd be famous.

    The spec for sqrt(x) says that result*result=x (for complex x). Any compiler smart enough to turn this spec into an implementation of sqrt would be more complex than simply implementing sqrt itself.

    --
    Patrick Doyle
    I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
  157. Re:If specs are 100% accurate,then they are the co by Coryoth · · Score: 1

    Specs should, in my opinion, be a language-independent description of the task - not implementation, but structures and interfaces only.

    Exactly. Further to that point, here is a discussion on that very subject, including examples of implementation and spec, and how they differ, and what the spec offers that the implementation doesn't.

    Jedidiah.

  158. Re:There's a difference between interfaces and spe by timjdot · · Score: 1


    I'd love to see Linus get a new house built without any specs. Funny stuff!!!

    --
    Expect Freedom.
  159. TPS reports by 97cobra · · Score: 0

    I love specs. It makes it easier to fill out my TPS report at the end of the week.

  160. What are specs good for by the+eric+conspiracy · · Score: 1

    Mostly QA I think. Implementation driven by specs is fine and dandy, but the real meat of the benefit comes during testing, especially black box.

  161. AKA BFUD by expro · · Score: 1

    BFUD (letters intentionally perjoratively reversed) is a straw man the Agile movement beats to death, trying to justify their existence. Sure, the plans don't always work out and you have to change them in mid-stream, and you better have done some degree of planning for that. If you can't change them mid-stream, the problem was not enough planning or bad planning, not too little.

    As a matter of fact, this is what good extensive up-front design process and more design along the way is most about. Having the "Big Picture" never meant having a detailed picture. It is about getting as many basics right as possible because these can be the hardest to fix later, getting it as simple, and flexible as possible, which contrary to the outspoken Agile advocacy (trying to sell their products), doesn't happen by wildly pursuing the first thing that pops into your head, and is what good software designers have been doing all along, not chasing their tails in a cycle where each generation of software doesn't learn a thing from the prior because they can't assume the responsibility that would be involved in writing it down.

    If the important things are established properly, and conscientouusly revised, they can also be adjusted as necessary and the little things won't get out of control. If someone tells you up front design can't be done or is bad, it is probably just because they can't do it. Managers who think this way is called one minus management, making sure all people below you are dumber than yourself, and it doesn't produce good software, although those involved in such a process are all very proud of themselves.

  162. Re:Remember Linus is a hands-on practical kind of by dswan69 · · Score: 1

    Specifications aren't about theory, they're about what a system is expected to do, if it is a software specification.

    How about this - Boeing engineers announce they don't need specifications, they just start building aircraft and see what happens.

    "that real hackers, the ones that I have come to respect over the years, simply sat down and built the tools that they needed"

    And you end up with an unmaintainable mess if it is anything more than a simple, short piece of code. Much of the time prima donna, hotshot programmers are a liability on large projects. These are the guys who claim they don't have time to comment or document their code, but also can't explain exactly what it does a couple of months later. They're useful when you need code produced in a hurry and you don't care about modifying the code again later.

  163. It's possible to create usable specifications by rben · · Score: 2, Interesting

    But one of the most important things to do when creating one is make sure that each and every element of the specification is testable. That prevents you from wandering off into wild-eyed ivory tower land. I know, because I've been very successful at writing specications documents. On the most successful one, we had 4 bugs at the end of a three month development effort. We were on time and under budget. On the previous iteration of the system, it took three years, was over six months late, and had over 300 bugs that took three months to stomp. Granted, a good specification was not the only factor. I was working with an excellent development team and a manager who enforced good practices, such as complete code reviews for every piece of code before it was checked in.

    BTW, It's not unusual for Linus to say some pretty bizarre things. Often they are taken out of context, but sometimes, like any other human, he's flat out wrong. [ waiting for the god of programming to strike me down... ]

    Anyone who blindly accepts statements made by someone else should become a religious disciple, not a programmer. If you want to be a good coder, investigate and make up your own mind, don't let people tell you what to believe.

    --

    -All that is gold does not glitter - Tolkien
    www.ra

  164. Re:If specs are 100% accurate,then they are the co by ankhank · · Score: 1

    > the application still has some issues regarding coordinate
    > conversions.

    And the application is to direct what kind of hardware?
    Cruise missile, maybe?

    ISSUES???

    Oh, wonderful.

    I remember hearing a guy in the Strategic Air Command joke that they just targeted time zones, but at least they remembered the shape of the planet made a difference.

    For military purposes, assuming a flat Earth is scary.

  165. kernal programming is different by planetfinder · · Score: 1

    These remarks by Linus are being taken out of context. For most programming
    jobs you have a customer who specifies what they want. So a specification is part
    of the deal. To the extent that the specification doesn't exist somewhere,
    even if its just in the head of you and the customer, you are guaranteed to have
    serious problems getting paid and ending up with a satisfied repeat customer.

    I think that a lot of impressionable beginning programmers are going to take these remarks out
    of context and are going to have problems on their next few interviews.

  166. Specs are dilbertarian in nature by Anonymous Coward · · Score: 0

    Specs are the dilbertarian weapon of choice of those who do not understand software development attempting to dictate to those who do. IE, managers. By writing overgeneralized nonrelevant specs in glossy bullet-points, it makes overseas outsourcing seem more palatable and seeks to diminish the task of complex software development into monkey points.

    The crux of the problem is a lack of feedback cycle between spec development and software development. IE, often the specifications must optimally depend on knowledge of the software and tools available for completion of the project, yet that is specifically what the writer's of many specs choose to ignore. Therefore, the specs become useless.

    If there was collaboration between management and engineering on the specs and time allocated to engineering to do study to develop proper specs, than it would produce more useful documents. However, that assumes management would have to respect the input of engineering, which would do away with most of the justification for creating those specs in the first place! QED.

  167. I still don't need specs... by tshak · · Score: 1

    Without a spec you won't know what you're being asked to build...

    I develop software according to my customer's requirements, not specifications.

    --

    There is no longer anything that can be done with computers that is nontrivial and clearly legal. -- Paul Phillips
  168. But Linus is actually talking about... by WebCowboy · · Score: 1

    ...how specs are USED. I think his language could be clearer because it is causing a lot of responses like yours. However his opinions are quite accurate.

    However, specs are not always theory, and they may be usefull, as well as docs.

    Yes, many specs are absolutely essential. If developers of browsers and web content followed W3C's specifications the web would be a much better place. POSIX makes portability much more feasible. Following standards specifications is what made the internet possible.

    Notice a common thread among those specs? They are all STANDARDS--one type of specification. Standards codify a common set of practices (ideally best practices but in reality there are often compromises). If there is just one kind of spec that should be honoured, it is the vendor-neutral standard. These specs are at a level quite removed from the end-user experience and are not specific to any single, specific application. Casual end-users would not directly notice whether standards are followed. Sysadmins, integrators and future developers maintaining such applications REALLY notice such things however, and eventually managers and regular end users will too--in the form of reduced maintenance costs and better reliability and interoperability.

    The type of spec Linus is probably referring to are application-specific architectural and functional specifications. These sort of specs, particularly the latter type, have proven to be mostly complete wastes of time. This has a lot to do with the fact that the ways such specs are created and employed with respect to software developent are fundamentally flawed. These flaws usually have to do with doing all these specs up front then following some "waterfall" method of project management whereby you completely implement a full set of specs, periodically reviewing and doing iterations, testing then releasing.

    Applying the above methods to software development, or in fact any very large engineering projects, is bullsh*t. Such methods do not scale very well. This is something I've learned in the last couple of years as I've found myself involved in projects at a higher level and have gotten a clearer view on the "big picture"--and also from seeing how my employer has had to pull some near-disasterous projects out if the fire. Successful projects have either been quite small and succeeded despite the flawed process, never followed the above model or ended up throwing out the original specs half-way through development. This has been the case whether it was a software product or a refinery.

    He cited OSI model, well, but I can assure you I won't go in an airplane if it was done with Linus' practices...

    The OSI model is an example of a STANDARD--a model that should be understood and respected but generally makes little sense to mimic in code and Linus says as much in his message. As for going for a ride in an airplane designed by Linus--well barring the fact that aircraft and operating systems are too different to apply the same practices I'd much rather fly the "Linux 727" than the "Microsoft DC10" any day. Furthermore, if you were to look at how aircraft are designed you'd find that they are in fact designed and built WITHOUT a "spec" of the type Linus bemoans. If a jumbo jet was designed the way a lot of people try to do software projects then hundreds of people would get together from Boeing, airlines and airports and write a huge, detailed and incomprehensible spec for a jet--for everything from the layout of the instrument cluster to the shape of the turbine blades on the engines to the size of the tires. Then the managers from Boeing, all the airlines and all the airports would "review" (or gloss-over really) the spec and sign it off and then Boeing would design the plane, following that spec for everything. Then they'd test the end product and "interate", crashing a few dozen multi-million-dollar prototypes in the process. Then the airlines would get theri first new planes and complain that it isn't qu

  169. He's never seen it, so it can't exist. What logic by Kazoo+the+Clown · · Score: 1

    No wonder Linux has grown into a monster...

  170. Re:If specs are 100% accurate,then they are the co by DerekLyons · · Score: 1
    After all these (and many more...) I am not surprised at all that some certain space agency's probe failed to reach Mars because of one team using the metric system and the other team using the imperial system.
    The problem is - no agency outside of fiction has lost a probe because of any problem with conversion. The *reality* is that the certain space agency lost the probe because management failed to budget for analysis of the navigation data. Then, when presented with evidence of problems, they refused to believe they existed.
  171. People: He's talking about girls. by TractorBarry · · Score: 1

    People people,

    Linus was being asked what he thought about girls with a "secretarial look".

    Yeah, yeah I'll get my coat...

    --
    Sky subscribers are morons. They pay to be advertised at !
  172. Stop the underscore madness! by Anonymous Coward · · Score: 0

    _Jesus_ I mean _please_ _stop_ _this_ _right_ _now_ _!_ _!_

  173. In MY theory, specs and program co-evolve. by Ungrounded+Lightning · · Score: 1

    I write software to spec. In theory, that should work.

    Depends on the theory, and IMHO any theory that says it SHOULD work is incorrect.

    In practice it often does. But often there are gaps in the specification that the guy spec'ing should have seen, but didn't. Perhaps, his kids woke him up 20 times last night, perhaps someone made a bad pot of coffee.

    My experience is that many of the gaps or flat-out errors in the spec occur, not because the author should ahve seen them but had a braino, but because the author shouldn't necessarily have seen them.

    Writing a detailed spec up front and expecting to get it correct (without the growing program and its testbench in hand) is the same as writing a whole program in an editor without compiling it once and expecting the completed program to compile, run, and be error-free the first time.

    These gaps in the spec become glaringly obvious when writing the code and in the iterative component testing. That's the practice.

    Precicely. And that's what MY theory says should happen.

    As the design procedes problems with the spec are exposed along with problems of the design. For each mismatch you examine the difficulty: Usually it's a bug in the design and you fix it. Sometimes it's a bug in the design (or its rendering into spec). Then you fix THAT (perhaps after a meeting to examine the issue and proposed solution and approve the change.)

    The same is true in the design of digital hardware, such as ASICs, where design complexity often compares with an OS or application.

    Hardware - both digital and otherwise - SEEMS to involve design up front. But that's not really true.

    In the case of digital systems the final rendering into silicon and assemblies may be by-the-numbers. But the design of the components was an iterative process much like programming, with the design "crashing" in simulation hundreds or thousands of times before it's good enough to go to production.

    In the case of other things, like aircraft and spacecraft, bridges, dams, it sometimes SEEMS like things have been reduced to design-then-build with no trial and error. But that misses a lot.

    First: In many cases the function of the structures has been well defined for many product generations, with new designs often minor fit-and-cosmetic variations on something already built. Somebody designing his 30th house or 15th bridge might be able to do it with no major errors for the contractor to work around. (But somebody doing his 30th implementation of the same algorithm or the same hardware module might be able to do the same. How often does such a situation arise?)

    Second: These days bridges and buildings designed by well-debugged rules don't collapse and aircraft and spacecraft normally don't come apart or fall out of the sky unless there was an exceptional event or a negelect or error in prescribed maintainence. But a lot of buildings, bridges, aircraft, and spacecraft DID do so in the past - producing data that led to design rule changes which now prevent such problems. Film is available for many of the early aircraft failures, and many of us were around to watch news footage of some of the rocket oopsies. The film of the Tacoma Narrows bridge collapse is required viewing in engineering school, and so on. But this goes back a LONG way - clear into the archaeological record. (Early Egyptian pyramids had a steep slope. There was one that collapsed partially built. Pyramids built after that were standardized at a somewhat lower slope.)

    Third: When something new is attempted in these other fields it is simulated out the wazoo, just like a new chip, during the design phase. So again you get the co-evolution of design and debug.

    The reason you see a qualitative difference with software is that THE PROGRAM IS THE DESIGN. When you get your "final design" done and debugged in "simulation", you're DONE.

    The "spec" for software is somewhat of another animal than the "spec" for a bridge,

    --
    Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
  174. Re:If specs are 100% accurate,then they are the co by Anonymous Coward · · Score: 0

    The spec for sqrt(x) says that result*result=x (for complex x).

    No, it doesn't. According to your "spec", sqrt(4) = -2 is an acceptable answer. That's just not true.

    Any compiler smart enough to turn this spec into an implementation of sqrt would be more complex than simply implementing sqrt itself.

    You've got to be kidding.

  175. Re:If specs are 100% accurate,then they are the co by p3d0 · · Score: 1
    No, it doesn't. According to your "spec", sqrt(4) = -2 is an acceptable answer. That's just not true.
    Fine. Then the spec could say "result >= 0 and result*result = x". So sue me.

    Do you have a point?

    --
    Patrick Doyle
    I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
  176. Breasts not useful up front? by Roadkills-R-Us · · Score: 1
    ...Specs are rarely useful breasts up-front...

    Um, you prefer them where?

    Nevermind. I don't want to know.

  177. The software *IS* the ultimate spec by Anonymous Coward · · Score: 0

    I think most are *entirely* missing the point about what Linus
    seems to be saying.

    1) The software *IS* the spec, and it will always be 100% accurate
    because the spec is identical to the software.

    2) Specs that attempt to simplify or translate what the software
    is describing are just that, translations. Often, things get lost
    or left out in translation.

  178. Table-top Breasts. by Anonymous Coward · · Score: 0

    "Um, you prefer them where?"

    Nipples on the ass. :)*

    *It's not like there are many places one can place breasts, and they remain useful.

  179. et tu by A+Fortiori · · Score: 1

    Have you considered that your application of Godel might be outside the domain of this discourse?

  180. Two guys, a girl, and a pizza shop? by A+Fortiori · · Score: 1

    I like that show, you insensitive clod!

  181. Digging its own grave by Anonymous Coward · · Score: 0

    Good lord there is a reason engineering types could never run a succesful company. Bill Gates broke that mold and a reason why MS is the big goliath you all hate today.

  182. Re:If specs are 100% accurate,then they are the co by Anonymous Coward · · Score: 0

    Yeah, seriously. While I sympathesize with having to put up with an inaccurate spec, I think this points out some of the issues when you try to write software that you don't have any experience/domain knowledge in.

    It was a military application, so the coordinate system obviously should have been in the military's version of UTM, but instead they just looked it up on the Internet (probably using Google), and went with whatever answer came up?

    Again, a military application dealing with coordinates, and they ignore the little fact that the Earth is an ellipsoid. Hello, that can make a pretty big difference over just a few miles.

    Bad spec or no, someone who really understood what the purpose was of what they were doing would have done things differently. Anyone who knows anything about map projections at a high school, "hey let's discover the wonders of flat map projections Mr. Wizard" would have raised a red flag. Of course, the customer may very well have wanted things done in the wrong way (for compatibility with legacy systems, for example), so this doesn't exonerate the spec by any means, but it doesn't sound like they made the best decisions in absence of just asking someone who knew better, either.

    I thought not slavishly coding to spec was supposed to save the U.S. IT industry from the Indian competition? So much for that.

  183. Really... by SCVirus · · Score: 0

    I _think_ I _agree_ _with_ _every_thin_g_ _he_ said_._

  184. Example of a useful Software Spec: Openstep by tyrione · · Score: 1

    The specification is solid, and recognizing it will adapt to advancements in future framework design and language augmentation, GNUstep is adapting well to the changes we now call Cocoa.

  185. RE: by Joh_Fredersen · · Score: 1

    I personally like Linus and I recognise him as a great Software Engineer, one of the best probably.

    Taken in context what he says probably makes sense, taken out of context al-la this thread, I think it's important to note what specifications try to bring about.

    Specifications exist so that Engineers, Managers/End Users, can agree in as far as possible what our project is supposed to do. They are meant to keep away creeping featurism and ad hocism.

    I do agree with what I believe was Linus' core point, that following a specification when it gets in the way of obvious sense in terms of software design, is in fact senseless.

    Be calm citizen... consume.

  186. Re:Linus Taken to Task - we think differently by michaelebrown · · Score: 1
    Just as we look dramatically different on the outside, we think dramatically different as well, and all have different approaches to problem solving that work equally well depending upon the environment and circumstances.

    The Hermann Brain Dominance Instrument (http://www.hbdi.com/) clarifies this very well. (I'm not affiliated with HBDI in any way; I participated in a HBDI class a few years ago.) This class/test explained a great deal about these types of arguments/discussions/disagreements that have ensued over the years of my career.

    I am an off-the-chart "yellow", which means I don't like specs. I find them confining and overly time consuming. I feel they slow down the development process, and get in the way of the need for a dynamic and ever changing development effort. I _need_ this flexibility to work effectively and enjoy my work. I am creative, holistic, big-picture, and a strategic thinker. But, I often start work without considering all the details and may trip across a "Whoops! Didn't think about that!".

    However, my opposite, a "green", prefers specs, and can spend endless hours/weeks/months adding to the specification details. A "green" needs this structure to work effectively and enjoy their effort. A "green" can bring much needed structure and can cover all the details (avoiding the Whoops!). But, they are also the type that can end up in "analysis paralysis".

    Neither method is better than the other - just different - and the effectiveness can change with the circumstances. This characterization has nothing to do with intelligence. Both methods can lead to success or failure. BUT, greater success and synergy can be achieved by a well balanced team represented by all four quadrant (yellow, green, red, blue) thinkers, who all have an appreciation for each others talents.

    On a practical level then, I let the "green" people make their lists and plans (because they need to, and it helps), but I don't participate at a detail level. And conversely, they allow me to "bounce all over the place" with my ideas (because I need to, and it helps). Working together this way, we achieve synergy.

  187. Breasts / Babies by oldCoder · · Score: 1
    Technically, you don't need to remove the bra to conceive a child. It helps, but it isn't an absolute "Requirement".

    Later, at feeding time... But you'll get plenty of time to figure out the mechanism before then.

    There was a rare and isolate group of people discovered some time ago where the women actually had their breasts growing on their backs, instead of their chests. Breastfeeding was very awkward but dancing was popular.

    --

    I18N == Intergalacticization
  188. Different approaches for different people by michaelebrown · · Score: 1
    Just as we look dramatically different on the outside, we think dramatically different as well, and all have different approaches to problem solving that work equally well depending upon the environment and circumstances.

    The Hermann Brain Dominance Instrument (http://www.hbdi.com/) clarifies this very well. (I'm not affiliated with HBDI in any way; I participated in a HBDI class a few years ago.) This class/test explained a great deal about these types of arguments/discussions/disagreements that have ensued over the years of my career.

    I am an off-the-chart "yellow", which means I don't like specs. I find them confining and overly time consuming. I feel they slow down the development process, and get in the way of the need for a dynamic and ever changing development effort. I _need_ this flexibility to work effectively and enjoy my work. I am creative, holistic, big-picture, and a strategic thinker. But, I often start work without considering all the details and may trip across a "Whoops! Didn't think about that!".

    However, my opposite, a "green", prefers specs, and can spend endless hours/weeks/months adding to the specification details. A "green" needs this structure to work effectively and enjoy their effort. A "green" can bring much needed structure and can cover all the details (avoiding the Whoops!). But, they are also the type that can end up in "analysis paralysis".

    Neither method is better than the other - just different - and the effectiveness can change with the circumstances. This characterization has nothing to do with intelligence. Both methods can lead to success or failure. BUT, greater success and synergy can be achieved by a well balanced team represented by all four quadrant (yellow, green, red, blue) thinkers, who all have an appreciation for each others talents.

    On a practical level then, I let the "green" people make their lists and plans (because they need to, and it helps), but I don't participate at a detail level. And conversely, they allow me to "bounce all over the place" with my ideas (because I need to, and it helps). Working together this way, we achieve synergy.

  189. Interface Specs vs Design Specs by oldCoder · · Score: 1
    Clearly, interface specs are indispensible. Without section (3) of the man pages you wouldn't be able write apps to run on the kernel Linus wrote for us.

    Design specs need to be taken with a grain of salt. They represent planning. Just like you need planning to deal with broken levees on Lake Ponch. you need planning to build significant systems. All plans die on contact with reality. But the planning process is essential. The hardest parts of building significant software is often in the parts that are unexpected and unplanned for. Imagine if the whole system were that way?

    And the two forms merge. Just like they needed technical data on the pumps to estimate how long it would take to pump out NO, you need tech specs on file formats and application behavior to build software over a certain size.

    And if you still hate specs just get contact lenses ;-)

    --

    I18N == Intergalacticization
  190. Working with *your* drive or following SCSI Spec by artsrc · · Score: 1

    Posters keep talking theoreticaly about how they believe things should work.

    The *real* spec is "works with my drive", not the SCSI "spec".

    Be honest with yourself, would you believe you were compatable if you used inspection/testing to validate compliance with a spec, or would you do testing with other implementations.

    The point Linus makes is that things have to work.

    If there are timing issues not mentioned in the spec that real drives require, then it won't work to point at the spec and ask all manufacturers to withdraw their drives.

    Which is more important, working in the way you interpret the spec, or working with other real implementations?

    If POSIX does not require something but real applications need it, Linux must provide it. If POSIX requires something but no sane application uses it, Linux can get by without it.

  191. Re:Load of bull, Linux is based on specs, Star Gat by Dirtside · · Score: 1
    "Two guys, a girl, and a pizza shop"
    It can't be all bad -- Nathan Fillion was in it :) Actually, as I recall, it was pretty amusing.
    --
    "Destroy science and religion. Science would re-emerge exactly the same; but not religion." - Penn Jillette, paraphrased
  192. Re:I DON'T agree by Anonymous Coward · · Score: 0

    In my 8 years of software programming I got to see the ugly side of 'nice specs'.. people which get fresh from college, write a spec with nice images and such.. and the end result is ugly source-code that needs to be rewritten by men like me without a spec what so ever.

    Note that the years of work experience in fact does not really count so much as I also see people sticking by specs after 10 years, but the kind of work they do show they didn't really got far in their career. ;)

    I agree that when you need to create a standard between different many large parties (read companies) it is a good idea to write something down. But in many cases, it simply comes down to structured programming and the best documentation about any program is the source-code itself.. it won't lie!

    I also prefer to spend the most time on making the source-code work (we all have to meet deadlines) and less on documentation that gets outdated after you changed the source-code to solve some issue that the spec did not forsee.. and no, it is not a matter of making the spec better in the first place.. some situations you simply can't forsee and the timelime of several years means a higher chance of change.

    Just my frustation about people who think and/or get learned on school that specs are the ideal programming model..
    Let's call them unskilled programmers.