Slashdot Mirror


When Do You Kiss Backwards Compatibility Goodbye?

Arandir asks: "Backwards compatibility is great for users. But it sucks for developers. After a while your normally sensible and readable code becomes a nightmare spaghetti tangle of conditions, macros and multiple reinventions of the wheel. Eventually you have to kiss off backwards compatibility as more trouble than it's worth. The question is, when? Should my code conform to POSIX.1 or Single UNIX 2? Should I expect the user to have a ISO Standard C++ compiler? What about those users with SunOS-4.1.4, Slackware-3.2, and FreeBSD-2.2?" This question is really kind of difficult to answer in the general sense. The best advice one can give, of course, is "when you can get away with it". Not much help, that, but the lost of backwards compatibility, like most complex decisions, depends on a lot of factors. The key factor in most developers eyes, of course, is the bottom line. Have many of you been faced with this decision? What logic did you use to come to your decision and what suggestions do you have for others who might find themself in this predicament?

241 comments

  1. Ironically.. by Axe · · Score: 5, Funny

    Ironically I am doing it right now. Good part it is Saturday, and other developers do not know. Or they will lynch me..

    --
    <^>_<(ô ô)>_<^>
    1. Re:Ironically.. by Anonymous Coward · · Score: 0

      The situation you describe is not ironic, it is coincidental. There is a difference.

    2. Re:Ironically.. by Enonu · · Score: 1

      I used to care about how people used and abused the English language. Then I realized, like all other languages in the world, English evolves over time, and sometimes in the "wrong" direction. So if enough people "misuse" a symbolic term, and redifine that symbolic term by doing so, well by golly, it doesn't matter.

    3. Re:Ironically.. by DGolden · · Score: 2, Funny

      Dunno about that, it surely is irritating when Microsoft abuse the term "innovation", when IP-nazis abuse the term "piracy", etc...

      --
      Choice of masters is not freedom.
    4. Re:Ironically.. by am+2k · · Score: 3, Insightful
      when Microsoft abuse the term "innovation", when IP-nazis abuse the term "piracy"

      and when Slashdot-posters abuse the term "nazi"...

    5. Re:Ironically.. by DGolden · · Score: 1

      Touché :-)

      --
      Choice of masters is not freedom.
    6. Re:Ironically.. by invenustus · · Score: 2, Insightful
      and when Slashdot-posters abuse the term "nazi"...
      Tom Tomorrow takes apart Nazi analogies. This cartoon expresses my feelings on the subject better than I ever could.
      --
      grep -ri 'should work' /usr/src/linux | wc -l
    7. Re:Ironically.. by whereiswaldo · · Score: 1

      AGREED!!
      The whole point of language is to communicate your ideas to other people. If you use the correct meaning of a word and nobody else does, how are you communicating effectively?

  2. What are you asking us for? by el_mex · · Score: 3, Insightful
    You should know the best who your users are.


    You should know who they are, what equipment they have, who is making who a favor (ie: who has to adapt to whom), and specially you should know what they want (such as how much backward compatibility).

    1. Re:What are you asking us for? by bee-yotch · · Score: 1

      Well what about a program like linux? or any other one that millions of people use. There's no way that you can satisfy all of your users and you'd need a lot of surveying to even have a good guess at what your user base wants.

    2. Re:What are you asking us for? by el_mex · · Score: 2, Interesting
      Well what about a program like linux? or any other one that millions of people use.

      That is exactly my point: With Linux you know there are a great many users (with all sorts of different hardware, purchasing capacity, applications for your system, etc...) and so you would probably do best with having as much backward compatibility as possible.

      With a propietary corporate system, such as the ones I write, you can pretty much dictate when people will upgrade, and if there are old and incapable systems, you just buy new machines. Much different than the open source/commercial software philosophy.

      There's no way that you can satisfy all of your users

      Well, system requirements much more broad than just "how much backward compatibility to have."

      I would probably do what Linus does: Just focus on the very core and let someone else try to make everyone happy!

    3. Re:What are you asking us for? by colnago · · Score: 1
      Yes, he should, and that's probably why he asked the question.

      It sounded like the question was focused on proven, repeatable patterns. Like our use of other people's code, design patterns, frameworks, or methodologies, we look for best practices.

      I'm sure he was looking for some guidance in the realm of best practices while working out the details of his implementation. I don't think he was trying to shift responsibility for his work to an anonymous group of weblog posters. I'll bet he was looking for the wisdom of someone who's been through this before. It would be a shame if everyone on this site could only produce good code the first time it was written and, well, from then on out you are doomed to failure since no one has successfully been that way before.

  3. Open Source to the rescue! by stox · · Score: 1, Informative

    At least if you are trying to support an Open Source solution, you have a chance of going back and fixing the old application to be conformant with new API's, etc. If you're running an old binary, you have no choice but to provide the old API's.

    Hail Open Source, Death to binary only!

    --
    "To those who are overly cautious, everything is impossible. "
    1. Re:Open Source to the rescue! by Graymalkin · · Score: 3, Insightful

      Did that make sense to you before you pressed the submit button? It sure seems pretty silly now. You're suggesting updating an old version to new standards. That is what the entire concept of versioning is based around! You cap old versions and start anew for the entire purpose of keeping your applications up to date.

      --
      I'm a loner Dottie, a Rebel.
  4. OO design by Uncle_Chachi · · Score: 1, Insightful

    A properly designed OO system should alleviate all those backward's compatibility issues. And yes, in spite of all the /bots who complain about it, Java sure solves a lot of those OS/hardware compatibility problems...

    1. Re:OO design by Anonymous Coward · · Score: 0

      That's a stupid response. So you're saying that OO will help deal with backwards compatibility with legacy codes? Have YOU ever tried to get C++ and Fortran to be happy together? Backwards compatibility sometimes forces you to NOT use some modern technologies because they just don't work.

      Objects will solve everything... Bah... People have been saying that since the days of Smalltalk, and where are we? Not too much better than we were...

    2. Re:OO design by hedley · · Score: 2, Funny

      I am sure all of these Linux Java's will work fine. Can't be any compatibility issues here right? Besides anyone got a good VHDL sim in Java? Also a good finite element analysis program would be great.

      JDK-1.0.2/ Wed May 6 00:00:00 1998 Directory
      JDK-1.1.1/ Wed May 6 00:00:00 1998 Directory
      JDK-1.1.2/ Tue May 5 00:00:00 1998 Directory
      JDK-1.1.3/ Wed May 6 00:00:00 1998 Directory
      JDK-1.1.5/ Tue May 5 00:00:00 1998 Directory
      JDK-1.1.6/ Thu Oct 8 00:00:00 1998 Directory
      JDK-1.1.7/ Sun Jun 13 00:00:00 1999 Directory
      JDK-1.1.8/ Tue Aug 8 00:00:00 2000 Directory
      JDK-1.2.2/ Thu Oct 19 00:00:00 2000 Directory
      JDK-1.2/ Wed Aug 11 00:00:00 1999 Directory
      JDK-1.3.0/ Wed Jun 13 18:05:00 2001 Directory
      JDK-1.3.1/ Thu Jul 5 18:05:00 2001 Directory

      Hedley

    3. Re:OO design by Anonymous Coward · · Score: 1, Insightful

      "A properly designed OO system should alleviate all those backward's compatibility issues."

      Hardly, since these issues have *nothing* to do with methodology as such. A well-designed structured system will be more amenable to being backwards compatible than a poor OO design.

      If the design of the external interfaces (file formats, network protocols, etc) allows for future features, specifies 0/blanks for reserved fields, etc, then it's much easier to be backwards-compatible. This has nothing to do with OO.

      And if you're talking Java or C++, each of those languages has ancestral versions which make more recent versions have interoperability fits (old vs new GUI event model, older name mangling/namespaces).

    4. Re:OO design by PrismaticBooger · · Score: 4, Insightful

      It takes a lot more than OO design to solve this problem. The fact is that initial designs are almost always naive, and lack the specific flexibilities (and inflexibilities) the Ideal Solution would require. So, very often, are second iterations. But the third time's usually the charm.

      The need to depart from backward compatibility is the result of correcting design flaws. And design flaws happen, regardless of your programming methodology. Design flaws are less a product of programming methodology, and more a product of not completely knowing the problem.

      Java accommodates design flaws a little bit better not by being object-oriented, but by relying so heavily on dynamic binding. While this can make recovering from Bad Design simpler, it only lets you create bandaids that do nothing to fix the original design problems. And all that dynamic binding costs Java in performance across the board.

    5. Re:OO design by cooldev · · Score: 1

      Aaaaaahhhhbulshitchoooo!

      I like OO as much as the next guy (more, actually), but this is untrue. Since you bring it up, let's use Java as an example: do you use Swing or any of the Java 1.2 APIs? If so, you're not compatible with 1.1, so you have to make sure all your customers upgrade to the right version.

      For projects where you have 100 users that's not a big deal, but once you have millions it becomes a huge deal. It becomes a bigger deal when the you're thinking about using system APIs not available on older versions of the OS.

      Usually the solution is to dynamically use the library and only offer the feature on newer platforms (LoadLibrary/GetProcAddress on Win32), but after a certain point that leads to the mess the author was talking about.

    6. Re:OO design by robbyjo · · Score: 3, Insightful

      Java accommodates design flaws a little bit better not by being object-oriented, but by relying so heavily on dynamic binding.

      FYI, dynamic binding is a crucial element in OO programming. Programmers wouldn't have been able to downcast if you don't have this. It is indeed that this creates a lot of slowdown, but researcher has done flow analysis research to eliminate many of this.

      Concerning the design: Yes, you're right. Nobody starts with a "perfect" design. We will extend it, twist it and twirl it until it comes into a huge mess when we have to scrap the whole thing and rethink it.

      But, design flaws can be minimized. It doesn't depend on programming methodologies, but rather to a design methodologies -- which is pretty much debated by now. Using models (e.g. UML models) to depict a huge project maybe worthwhile because we can get a quick overview of what we are upto. Most of the times we can locate the design mistakes pretty quickly.

      Design flaws can also be minimized by documenting specification (which is pretty much a "meta-programming" approach). Sadly, nobody wants to do this. If you can get this done, there are a lot of tools (albeit still in research) that can automatically check your program whether it conforms to the spec or not.

      --

      --
      Error 500: Internal sig error
    7. Re:OO design by innocent_white_lamb · · Score: 1

      . Design flaws are less a product of programming methodology, and more a product of not completely knowing the problem. ---> Or a product of changing business conditions, which could include anything from customer expectations to regulatory changes or even market expansion. Sometimes the lack of a working crystal ball can be a real nuisance.....

      --
      If you're a zombie and you know it, bite your friend!
    8. Re:OO design by forgoil · · Score: 1

      I do agree to some degree there. It's the whole mess with vtables/BC etc makes it really hard to not break something in new versions.

      But as far as *BSD/Linux goes, it's no problem, just make sure the new version goes into a new version of the distributions, there are things that break everything all the time, but as long as you recompile the whole thing, it's fine.

    9. Re:OO design by jon_c · · Score: 3, Informative

      OO design is a pretty vague term, as it means different things to different people. However one concept that is proven to work for backwards compatibility is component design as found in COM and other component based frameworks.

      For those who are not familiar with the concept you don't deal with objects per say, instead you deal with interfaces to implementations of objects.

      For example

      ICat *pCat = NULL;
      pCat = MakeCat(IID_ICAT);
      pCat->Meow();
      delete pCat

      COM does it a little differently but the basics are there. You request an implementation to an interface, not the object itself. The way this works for different versions is that instead of IID_ICAT you can have IID_ICAT2 and ICat2 interfaces without having to break your old ICat clients. The implementation could even share much of the old code.

      For example:

      ICat2 *pCat = NULL;
      pCat = MakeCat(IID_ICAT2);
      pCat->MeowLoudly();
      delete pCat

      Admittedly it's not the most elegant design, but it works in the sense that you're not breaking old clients and still have room to support new interfaces.

      -Jon

      --
      this is my sig.
    10. Re:OO design by Anonymous Coward · · Score: 0

      - A properly designed OO system should alleviate all
      - those backward's compatibility issues.

      Well designed software doesn't need the OO approach
      to be portable and mantainable. This was bad press
      by OO development systems producers.

      - And yes, in spite of all the /bots who complain about
      - it, Java sure solves a lot of those OS/hardware
      - compatibility problems...

      Then give me a Java binary I can run directly
      on my PC under the POSIX compliant operating
      system I've just written.

    11. Re:OO design by Andreas+Rueckert · · Score: 1

      Depends on the configuration of your Linux box. 1.3.1 won't run on my box (glibc too old), while I work on a OSS app, that gets more and more patches, that require 1.3.x and won't compile on my 1.2.2 JDK. Maybe ORP + Classpath will save us all... :-)

    12. Re:OO design by uchian · · Score: 1

      Surely though the problem here would be either bloat (since the com object would need to carry every interface that ever existed, possibly seperately), and/or the complexity would still be there inside of the object.

      You still need the most up-to-date com object (what happens if you ask for IID_ICAT2 and it doesn't exist?) or else you have still got lot's of conditionals for the new code to check which COM version is available and to work with it.

    13. Re:OO design by Anonymous Coward · · Score: 0

      It doesn't matter if it's OO or not. If you can't at least provide some basic tools for upgrading a user's work. You have screwed up.

    14. Re:OO design by Anonymous Coward · · Score: 0

      Why bother setting pCat to NULL? That's just redundant.

    15. Re:OO design by orangesquid · · Score: 1

      Not necessarily. In some OO languages, the = operator can be overloaded; in fact, this is my big beef with OO languages is you don't know what the computer is doing (Simple expressions can be executing functions and the like, and this is extremely misleading). Plus, maybe in an old spec of some "Huge Integer" package, the undocumented x += value works as expected, but maybe in a new version, it might increase the precision instead or something.

      --
      --TheOrangeSquid Is it any wonder things seem so awry? We swim in a sea of confusion and don't have to think to survive
    16. Re:OO design by Anonymous+Brave+Guy · · Score: 3, Insightful
      A properly designed OO system should alleviate all those backward's compatibility issues.

      A properly designed and maintained OO system will alleviate some of the backward compatibility issues. The thing is, most OO systems are not well maintained, even if they were reaonsably well designed originally. Most developers, in my experience, are far too reluctant to refactor properly.

      This generally boils down to one repeated mistake. When changed requirements suggest a change in the responsibilities of your classes and/or the relationships between them, too many developers try to change the implementation or interface of classes in isolation instead.

      Unfortunately, in the long run, no amount of interface hackery can make up for an inappropriate distribution of responsibilities. It's just fudging the design, and the one thing you don't want to do with an OO design is mess it up with fudges.

      The reason you get to this "it's got no chance, let's start from scratch" syndrome is that too many fudges were allowed to accumulate. Instead of refactoring as they go along, keeping a design with clear responsibilities and relationships, programmers try to shove things in where they don't really belong. Once or twice, you can get away with it, but it doesn't scale, and ultimately leads to an unmaintainable mess.

      Of course, the problem is that adopting the "I'll just fix it here" mentality is, in the immediate timeframe, quick and cheap. In the long run, it's much more expensive -- a rewrite from the top will do horrible things to your budget -- but people rarely consider that far ahead.

      Such is the curse of the OO paradigm, where the benefits are only to be had by those who think: most people don't.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    17. Re:OO design by Thatman311 · · Score: 1, Insightful

      Yes it may lead to some bloat...but face it. Any backwards compatibility *could* be considered bloat because what you have is code in the binary that isn't being used when the most up-to-date user of the binary is using it.

      In saying that...one of the main purposes of something like COM is to provide backwards compatibility. Like other people say...when you have millions who use your stuff you really don't know what they do with it. So you really don't know what reordering the order of those function calls will do to some older user of your code. Maybe it will cause a race condition and break them. Who knows....that is why maintaining backwards compability on projects that have millions of users is a huge undertakening.

      --
      Silly Rabbit...Sig's are for kids.
    18. Re:OO design by SurfsUp · · Score: 2
      COM does it a little differently but the basics are there. You request an implementation to an interface, not the object itself. The way this works for different versions is that instead of IID_ICAT you can have IID_ICAT2 and ICat2 interfaces without having to break your old ICat clients. The implementation could even share much of the old code [...] Admittedly it's not the most elegant design, but it works in the sense that you're not breaking old clients and still have room to support new interfaces.

      But there's a much better way to do that: versioned libraries as in Unix. With library versions you don't have to insert all that compatibility guck inline in your code, and the library functions don't need the overhead of having to decode it. It's all done at link time. It doesn't make a bit of sense to pass the version information with every call, it should be constant across your whole application. Hmm, you could conclude that Microsoft designers knew what they wanted to accomplish but didn't know how to accomplish it, oh well.

      And yes, you can get problems with versioned libraries too, mostly because people may not have all the libraries they need. But that problem is solved definitively by apt-get, and soon apt-get will be standard for rpm's as well. As soon as I started using apt-get, all my library problems just vanished.

      No doubt Microsoft would like to pull off something like that but they never will because the whole apt-get packaging depends on continous feedback from informed users with sourcecode on hand, and by that I don't mean go through two months of negotiation to see the piece of source code you need, then start the whole process over again 1 hour later when you hit the next problem.

      --
      Life's a bitch but somebody's gotta do it.
    19. Re:OO design by error0x100 · · Score: 1

      all that dynamic binding costs Java in performance across the board

      I would guess that the cost of running on a virtual machine impacts Java's performance far more significantly than does dynamic binding.

    20. Re:OO design by AndrewHowe · · Score: 2

      Well, I don't know what OO languages you are talking about, but in C++ (which the above example is clearly written in) the = operator can be overloaded, but not for built in types. pCat is of type ICat*, which is a built in type (it's a pointer). Assigning a pointer to it "does exactly what it says on the tin".
      So, necessarily.

    21. Re:OO design by mimbleton · · Score: 1

      "the whole apt-get packaging depends on continous feedback from informed users"

      Or , to put it in other way, users unnecessarily burdened with completely irrelevant to the task at hand, issues.

    22. Re:OO design by SurfsUp · · Score: 2
      "the whole apt-get packaging depends on continous feedback from informed users"

      Or , to put it in other way, users unnecessarily burdened with completely irrelevant to the task at hand, issues.

      Sure, if you consider having a smoothly functioning distribution/update system irrelevant. Did I mention that said informed users seem more than happy to shoulder this burden so that the other 99% don't have to? No? Think about it.

      --
      Life's a bitch but somebody's gotta do it.
  5. Compatibility is crucial by The+Ultimate+Badass · · Score: 2, Insightful

    Even if you are writing a minuscule app for your own use, that could not conceivably have any use for anyone else, you should always adhere to the following rules:

    • Use autoconf and automake. I don't care if there's nothing to configure. Do it.
    • Try and place as much code into libraries as possible. Modularization is good. Use libtool religiously
    • Try and test your code on as many unixes as possible. For this reason, I have every NSD, and linux kernel major on my machine. It is unthinkable to assume that if someone who wants to use your program on a platform you didn't test for would be willing to fix your code and send you the patches. Open Source just doesn't work that way
    • Forget the above rules and use java.
    --

    Denial isn't just a river in Italy

    1. Re:Compatibility is crucial by Anonymous Coward · · Score: 3, Insightful

      "... Forget the above rules and use java."

      1.0, 1.1 or 1.2? IBM or Sun or Blackdown? AWT or Swing?

    2. Re:Compatibility is crucial by Skapare · · Score: 3, Insightful

      So where does one get a box full of all these unixes? I do agree with you on that part about broad testing. But I can't afford to buy all those boxes (especially not an IBM zSeries). And finding shell accounts (especially root ones) for various testing seems to not go beyond Linux, FreeBSD, and a handful of OpenBSD and Solaris. Even the IBM mainframe accounts are available to only a few people, and then for a limited time (have you ever known an open source project to take 3 months and stop development then because it's "done"?). I do have Linux, FreeBSD, and OpenBSD on Intel, and Linux, OpenBSD, and Solaris on Sparc. What else would you suggest?

      As for Java ... I'm waiting until environments are built that can do what I do now in C. I'm hoping gcj will let me do at least some of these things in Java. But there are some things I doubt it can ever do. You can prove me wrong by rewriting LILO and init into Java.

      --
      now we need to go OSS in diesel cars
    3. Re:Compatibility is crucial by casings · · Score: 1

      Forget the above rules and use java.

      no.

    4. Re:Compatibility is crucial by Znork · · Score: 2

      Well, you do have a problem there. IMO, the best thing you can hope for is that people like me will find your program useful at work, in which case I'll take the code and do whatever porting is necessary to get it running on HP-UX, AIX and perhaps True64, and submit it back to you.

      Ask the people behind the software porting archives for the various platforms, they might be able to hook you up with either hardware or people. Or ask for porting/testing help on newsgroups or mailing lists. There are a lot of people out there with loads of junk hardware. You could try calling the companies in question, and maybe they can put you in touch with someone inside who might be able to arrange either access or testing, but finding the right person would be difficult. You'd probably have better luck finding someone who works for the companies by going over opensource development mailing lists. Oh, and VA/Sourceforge has a compilefarm with several platforms too.

      Of course, those options are only valid if you're doing opensource work and your application is both interesting and reasonably well written. Do use autoconf and automake, it makes porting a bit less painful.

      If you do proprietary software... well, good luck. There's a reason that software is more or less supported on the various platforms...

    5. Re:Compatibility is crucial by EvlG · · Score: 2

      1.3 (soon to be 1.4), IBM if available, and almost always Swing, to answer your questions.

    6. Re:Compatibility is crucial by jsse · · Score: 1

      1.0, 1.1 or 1.2?

      Java handles backward compatibility by 'depreciation'. That's what the original poster meant. I think you knew it.

      IBM or Sun or Blackdown? AWT or Swing?

      Yes there's issues here, but aren't they outside the scope of this discussion?

    7. Re:Compatibility is crucial by suwain_2 · · Score: 2
      Try and place as much code into libraries as possible. Modularization is good. Use libtool religiously


      Personally, I *hate* libraries. Then again, I'm running RedHat on x86 using "standard" apps.

      My problem is that I *never* have whatever library the program I'm trying to install requires, and all too often, I have no idea where I might *find* the library. And I've had libaries that can't be installed due to other library dependencies... *grrr*

      I guess my problem isn't with the actual use of libraries, but with their implementations. Why don't developers offer a version of their packages *with* every libary you may need? Personally, I'd be soooo much happier if I could just run a script to install all the libraries.

      Of course, then you have to worry about how well that script works, and if it'll overwrite my libraries with older / non-working libraries. But you get the idea... :)

      --
      ________________________________________________
      suwain_2 :: quality slashdot p
    8. Re:Compatibility is crucial by greenrd · · Score: 1
      I have no idea where I might *find* the library.

      First type whereis libfoo to see if you have it. Then go to rpmfind.net and look for it. Failing that (exceedingly unlikely) look on google.

      It's not that hard!

    9. Re:Compatibility is crucial by elflord · · Score: 2
      My problem is that I *never* have whatever library the program I'm trying to install requires, and all too often, I have no idea where I might *find* the library.


      www.rpmfind.net. You'll also find that a lot of the problems are caused by binary incompatibility. Binary compatibility problems don't have any easy solution.


      Why don't developers offer a version of their packages *with* every libary you may need?


      Because such a package would be enormous.
      A better approach would be to just link to the required libraries.




      Of course, then you have to worry about how well that script works, and if it'll overwrite my libraries with older / non-working libraries


      Again, binary compatibility. If this is a big problem, just compile from the source. Or get versions of the library that were compiled against your distribution.

    10. Re:Compatibility is crucial by elflord · · Score: 2
      I think your problems partly answer the question. You need to make sure that your software runs on your users platforms. If you can't find shell accounts on a given OS, it's probably because your users aren't using it. If your users are using a given OS, but can't/won't give you a shell account, let them test/port to that OS.


      I'd think that if you've got big endian/little endian platforms, and SysV/BSD, that's a pretty good start.


      Did I mention, use autoconf, and it will make porting to anything else much easier ...

    11. Re:Compatibility is crucial by scrytch · · Score: 2

      > You can prove me wrong by rewriting LILO and init into Java.

      The microcode in your CPU isn't written in C, I guess C isn't good for anything either. Anyway, my bootloader's written mostly in forth, which does specify a VM.

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    12. Re:Compatibility is crucial by renoX · · Score: 1

      >Java handles backward compatibility by
      >'depreciation'. That's what the original poster
      >meant. I think you knew it.

      Yes in theory Java is backward compatible by tagging old interface 'deprecated' which cause warnings at the compilation..

      In my practice, it doesn't work very well: during the 1.1.x -> 1.2.0 transition they added a new printing interface and 'deprecated' the old interface.
      The old interface was supposed to work, unfortunately it didn't and the new printing interface was incroyably slow and memory consuming..
      The result? You couldn't print anything moderately complex with 1.2.0 and the much needed corrections of the rest were only on 1.2.0..

      Talk about good backward compatibility!!

    13. Re:Compatibility is crucial by jsse · · Score: 1

      May be the old printing interface is in fact slow and memory comsuming, thus create a new one.

      Well, they aren't supposed to put resources to optimize depreciated api in new release, are they? :)

    14. Re:Compatibility is crucial by stephenbooth · · Score: 2

      Personally, I *hate* libraries. Then again, I'm running RedHat on x86 using "standard" apps.

      My problem is that I *never* have whatever library the program I'm trying to install requires, and all too often, I have no idea where I might *find* the library. And I've had libaries that can't be installed due to other library dependencies... *grrr*

      I guess my problem isn't with the actual use of libraries, but with their implementations. Why don't developers offer a version of their packages *with* every libary you may need? Personally, I'd be soooo much happier if I could just run a script to install all the libraries.

      Of course, then you have to worry about how well that script works, and if it'll overwrite my libraries with older / non-working libraries. But you get the idea... :)

      Here you're getting into the sort of terratory that is usually inhabited by, mostly propietry, paid for software. With very few exceptions I've found that paid license software will have the extra touches like libraries included with the install media (and usually an installer clever enough to only install a library if you need it and it won't break your system by over writing a later version of the same library) or at least the URLs of where to get the libraries or patches to bring you system to the required level to run the software. I rarely see a free/open source package that has that. You do get what you pay for, usually.

      My interpretation of the post was that the coder should put as much functionality into libraries or functions rather than the main executable(s) to aid modularisation and (probably) improve code sharing amongst modules of the app. Rather than relying on external libraries over which they have no control. Those liobraries I woulde expect to definately be in the install media.

      My thoughts on backwards compatabiity are to try to avoid changes to things like file formats and APIs unless absolutely necessary. With file formats try to support as many older versions as you can, ideally for both save and load but as a compromise you could make it such that it will load all previous versions but only save current and last 2 versions or something like that. With APIs, if the way it is called changes, where possible provide a wrapper/interpreter for the old API call that translates it to and from your new functionality. Anything that changes file formats or API calls in a non-transparent way incrememnts the major version number. Provide a migration path and utilities to aid migration.

      Also document, document, document. I'm deathly serious. Document everything. When you make a change to the source code put in a comment saying what you did, why you did it and how to undo it (eg if you make a change to a line, copy the line, commnent out the original and change the copy -- Although this is really only advisable for a few single line changes, anything bigger and you'd probably want to use something like RCS or SCCS to maintain your change history, which is another advantage of modularising your code as that way the number of changes per file will be small so you only have to rollback and reimplement a small part of your code to reverse a change), it makes it a heck of a lot easier to maintain your code later. Document all changes in the Release Notes, Migration guide, Installation documentation and the User Guide, odds are that users will read at least one of these, if they don't you can at least tell them to RTFM with some moral justification.

      --
      "Don't write down to your readers, the only people less intelligent than you can't read" - Sign on Newspaper Office Wall
    15. Re:Compatibility is crucial by suwain_2 · · Score: 1
      I've used rpmfind a lot, but sometimes I still have trouble. Assuming the obscure library is found on rpmfind; I often have trouble installing it. Yeah, I know make/make install and all that, but I've gotten the most annoying problems... The worst is when I do a full install of RedHat, find that a common app I don't have is missing a libary... Then I go and get the library, and try to install it, only to have *THAT* fail due to library dependencies.

      I agree that it's generally fairly easy, but I was referring to the small portion of the time when I get dozens of cryptic error messages, and, in trying to fix them, end up with more. A determined person might spend hours fixing libraries, but I'm rather impatient, and would just as soon give up and use an alternative program.

      Looking over what I wrote, it almost sounds like I'm saying that I hate Linux, and that it never works. That's not at all the case; Linux installs can be almost "easier" (if you know what you're doing) than some Windows installs; I'm referring to the occasions when everything possible just goes wrong.

      --
      ________________________________________________
      suwain_2 :: quality slashdot p
  6. Who Needs Backwards Compatibility by a.tomaka · · Score: 2, Funny

    Bah, make the users conform to the developers, not the other way around!

    --
    -------------
    Andy Tomaka :: www.whoisandy.com atomaka@cybernox.com
    1. Re:Who Needs Backwards Compatibility by Anonymous Coward · · Score: 0

      Let me guess, you're a KDE or GNOME developer?

    2. Re:Who Needs Backwards Compatibility by a.tomaka · · Score: 1

      *LOL* Nah. Web Programmer. Perl mostly, along with some PHP, and I am making a weak attempt to learn some Python.

      --
      -------------
      Andy Tomaka :: www.whoisandy.com atomaka@cybernox.com
  7. From the M$ Software Development Policy Manual... by NoMoreNicksLeft · · Score: 3, Funny

    Abandoning backwards compatibility is often a controversial action, that needs to be carefully considered beforehand. Often, the best course of action is to consult with the Licensing Dept. They've been making great progress in the time it takes to reword licensing so that it is illegal for end users to attempt to use older hardware and/or software, often they can provide a solution in less than 3 months. This provides the Legal Dept. with a steady stream of secondary revenue, when they audit, and sometimes sue those users who call support hotlines. A win-win situation for all of us!

  8. Break it all at once by moebius_4d · · Score: 5, Insightful

    The two things I would say are, when you really reach the point where all the old crap is really clogging up the veins, fix it all at once. Make a clean break. Then people can at least keep in mind what is happening, what works with 2.x and what is still only for 1.x.

    The other thing is, try to design to keep this from happening. Expose APIs that don't need to change much instead of the actual functions or objects that you use. One more level of indirection won't kill your performance in almost every case, but it will give you a whole lot more room to re-engineer when you decide you have to.

    All that applies to the case where you control the interface and you need to change it. When you're publishing source code and want to decide what tools you can expect the user to have to make use of it, that's a marketing decision and not a technical one. You're talking about how many people will be excluded from your audience if you use GTK or assume a conformant C++ compiler. Technically the newer tools and libs are generally better, that's pretty clear. I think it's going to be a judgement call on the part of the developers as to how much they care about a lot of people being able to use their code. If they are willing to wait for the world to catch up before being able to use their program, then they can use the latest and greatest. If not, then they have to aim at a realistic profile.

    1. Re:Break it all at once by Surak · · Score: 2

      The two things I would say are, when you really reach the point where all the old crap is really clogging up the veins, fix it all at once. Make a clean break. Then people can at least keep in mind what is happening, what works with 2.x and what is still only for 1.x.

      So what you're saying is, Microsoft should've given up on backward compatibility a long time ago? :-P

  9. when? by Twisted+Logic · · Score: 0

    When the architecture you're keeping backwards compatibility for no longer exists. (ie EMS/XMS in
    WinDOS)

  10. Apple's plan by mr100percent · · Score: 3, Interesting

    I think I like Apple's backwards compatibility, but it's not making one app backwards compatible,

    For instance, when they migrated to the PPC architecture, they made apps that ran on both platforms and older OSes, then capped development and froze the older version at whatever version number, then developed for newer machines. The rest of the apps followed, like AOL 2.7 is AOL's last 68k release, they just developed only for PPC since then, although apps like Opera still make a 68k version alongside a PPC version.

    Of course, you need to know your users, Will they be satisfied with a frozen and version capped release, provided there are no bugs?

    1. Re:Apple's plan by darkonc · · Score: 5, Insightful
      Apple was very conscious of the idea of backwards compatability. More important than being able to run new apps on old boxes was the fact that most of the code that ran on a 128K 8Mz mac is still able to run on a 2GB 800Mz powerPC. Your investment in older software is not generally obsoleted by the new OS.

      Often, Backwards compatability problems can be avoided by careful design. Leave room for improvements. Designate certain structures as ignorable. Presume that the current incarnation of the code is not the final version.

      Design for elegence. If the current code is relatively clean, then chances are that it will be easier to tack on an addition later on. Include stubs for improvements that you can forsee adding later on -- even if you can't percive the exact form of the improvement at the time. When you tack on the addition, try and do that elegantly too.

      With languages, you can sometimes avoid backwards compatability problems by not using the latest and greatest features just because they're there. (it also allows you to avoid creeping featurism growing pains).

      If using a new feature makes a big difference in the implementation of a solution, then use it, but at least document it. It keeps you more conscious of the break, and makes life easier on the people who have to rip out your code and re-implement it on the older system that you thought nobody was using.

      Anecdote: A friend of mine recently found out that that the security system where he had a storage locker was run on by apple IIc. The box was doing a fine job of what it was designed to do 20 years ago. Just because it's old, doesn't mean it won't work.

      --
      Sometimes boldness is in fashion. Sometimes only the brave will be bold.
    2. Re:Apple's plan by Anonymous Coward · · Score: 0
      Often, Backwards compatability problems can be avoided by careful design. Leave room for improvements. Designate certain structures as ignorable. Presume that the current incarnation of the code is not the final version.

      I know I'll get heckled for this because it's such a buzzword, but XML - and markup languages in general - are an excelent way of building in future compatibility. You can bring in new features and not break older ones as, depending on the application, they can just ignore newer instructions.
    3. Re:Apple's plan by neitzsche · · Score: 0, Offtopic

      Dear gwb:

      'obsoleted' is not a word.

      --
      "God is dead." - Frederik Nietzsche
    4. Re:Apple's plan by Anonymous Coward · · Score: 0

      Dear neitzsche, You do not exist.

    5. Re:Apple's plan by Anonymous Coward · · Score: 0

      I looked at the link and it appears obsoleted is "No longer in use: an obsolete word."

      ;-)

    6. Re:Apple's plan by serial+frame · · Score: 1
      like AOL 2.7 is AOL's last 68k release

      My foot! I used 3.1 on my Mac Performa 631CD, which runs with a 68040 at 33MHz inside. I think it was compiled as a FAT binary.

      And yes, I think it's excellent that Opera is still provided as a 68k binary. It enables places like my old middle school to comfortably browse without the bulk of Netscape (which is much too slow for my tastes on my Mac).

      Not that anything I said above means much, but backward compatibility is generally a Good Thing(tm). Up to a point. For example, do you expect anybody to be using Netscape 1.0 nowadays? No. Current web designing practices have rendered it useless, and people have moved on.

      --

      -
      And the Angel said unto me, "These are the cries of the carrots! The cries of the carrots!"
  11. 2 Versions by Sawbones · · Score: 1

    Thats a rough rule at best - and one I often see flexed, and often flex myself - but 2 versions of any critical dependancy is often the accepted standard I see. In general it seems that for main stream applications it is reasonable to expect the user to be within 2 versions of the current latest version of whatever you're working on. It is reasonable to expect someone to be running at least - say - RedHat 5.x, or netscape 3 (IE 4 if you have the choice). Much beyond that and it seems that it is an unreasonable expectation of the user that the latest version of the software will work on their system. A hardware analogy is that at some point you just have to say, "I'm sorry 486SX_User_01, but this just isn't going to run on your system (at any decent speed)"

    For dependancies like the compiler listed in the question, if it was available in said 2-previous-versions of the distribution it is a reasonable expectation.

    Just my 46 Lira.

    --

    Ad in classifieds: Pandora's Box (no box) $5
  12. Possible Compromise by robbyjo · · Score: 5, Informative

    I think there are several approach you may choose.

    If you think your program/library has been widely adopted by many people, it would be very very hard to scrap the old one and start anew. You will provoke the wrath of other developers that use your program/library. If this is the case, then the possible compromise can be:

    1. Overhaul the inner working of your API, but retain the signature (and the semantics) and the developers can think that it is just like the old one. This perhaps does a limited reform.
    2. The second choice would be to extend the API. There are a number of choice you can do here. If your extension is like adding several parameters to a method/function, you'd probably want to add a macro to deal with the compatibility thing. Another way is to leave the old API that way and make a new function. (BTW, Windows does this). And then tell your user to use the new API instead.
    3. If your API is not used by a lot of people, you'd probably want to revamp the whole thing. You'd have to tell people why and how to convert their program into your new convention. Note that in doing this, you should carefully design your API so that you won't do another revamp (users will hate you if you do so again).

    To do revamping, you'd probably want to look on how the Windows COM approach. I'd hate to say this, but this approach is generally good, but I don't know whether I can come up with a better solution.

    Or alternatively do an OOP approach. OOP can help modularizing your code if it is done properly. (That's why KDE rocks)

    That's my 2c, though.

    --

    --
    Error 500: Internal sig error
    1. Re:Possible Compromise by Anonymous Coward · · Score: 0

      "Or alternatively do an OOP approach. OOP can help modularizing your code if it is done properly."

      ...and, you wind up with something like Java's 1.0 -> 1.1 event model migration if not..

    2. Re:Possible Compromise by Anonymous Coward · · Score: 0

      KDE depends on Qt... Qt has had 2 major revisions, and everything that depends on it was/is rewritten. Admittedly, Qt2->Qt3 is apparently much less of a headache than Qt2->Qt1

      C++/Java doesn't always solve this problem.

  13. Small app story by IceFox · · Score: 3, Interesting

    This is the story of my app, Kinkatta ( http://kinaktta.sourceforge.net/ ). It originally was a QT only app and only recently did it move over to utilizing KDE. But that in itself isn't exactly what this is about so I will talk about the more spisific case. From .25 to .91 today we have gone through I believe 4 different formats in which we save our settings, buddylists and so forth. In each of the changes we had to add some code to convert it over. The best solution we found is to know our users and make sure they know about us. What I mean about that is that we only support the previous settings format and make sure everyone uses it. Kinkatta's users are kept informated when a new release is out through a number of ways. We then keep that format for as long as it takes for us to be sure that 99% of the users are using that format. One of the nice things incorperated into kinkatta is the auto-check feature. On login it will goto the webpage and see if there is a new version and if there is then it will tell the user. This prompts them to stay up with the new releases much more then if the feature was not there (and yes you can disable it). Do to the gpl/lgpl nature of the app people will upgrade more often and are unlikly to stay with version 0.64.1 This is a true plus point for the open source. Because of it we havn't had to worry about users who don't want to pay the 29.95 for the new version.

    --
    Do you changes clothes while making the "chee-chee-cha-cha-choh" transformation sound?
    1. Re:Small app story by Anonymous Coward · · Score: 0

      So if I use your app only once a month, I have to redownload it every time?

    2. Re:Small app story by Anonymous Coward · · Score: 0
    3. Re:Small app story by Anonymous Coward · · Score: 0

      ... 404 not found

      Use your brain.

      This is the story of my app, Kinkatta ( http://kinaktta.sourceforge.net/ ). It originally was a QT only app and only recently did it move over to utilizing KDE. But that in itself isn't exactly what this is about so I will talk about the more spisific case. From .25 to .91 today we have gone through I believe 4 different formats in which we save our settings, buddylists and so forth. In each of the changes we had to add some code to convert it over. The best solution we found is to know our users and make sure they know about us. What I mean about that is that we only support the previous settings format and make sure everyone uses it. Kinkatta's users are kept informated when a new release is out through a number of ways. We then keep that format for as long as it takes for us to be sure that 99% of the users are using that format. One of the nice things incorperated into kinkatta is the auto-check feature. On login it will goto the webpage and see if there is a new version and if there is then it will tell the user. This prompts them to stay up with the new releases much more then if the feature was not there (and yes you can disable it). Do to the gpl/lgpl nature of the app people will upgrade more often and are unlikly to stay with version 0.64.1 This is a true plus point for the open source. Because of it we havn't had to worry about users who don't want to pay the 29.95 for the new version.

    4. Re:Small app story by Anonymous Coward · · Score: 0
      That doesn't sound right, e.g. I use gaim (sorry ;D) very rarely, only once or twice a year. So if I used your application I would have to set it up again every time I used it.

      You wouldn't have to write code to migrate from version 1 to the latest version; instead you could just copy-n-paste your conversion code from version 2 followed by the code from version 3 and then version 4, this wouldn't cause that much code bloat I think.

      Or you could use a data format that's a bit more extensible, this seems to be the real problem.

      But I haven't looked at your code so perhaps I should shut up.

    5. Re:Small app story by IceFox · · Score: 2

      If you want all the latest bug fixes and features. Of course that was in the hay days. Now we are very stable and only release once a month at most with 3 or 4 bug fixes. Oh and I should have added that we don't change the format within a month or anything. There was a good 6 months per format easy. Oh and concidering how small of a user base our app has things can work out a little easier.

      --
      Do you changes clothes while making the "chee-chee-cha-cha-choh" transformation sound?
    6. Re:Small app story by Arandir · · Score: 2

      instead you could just copy-n-paste your conversion code from version 2 followed by the code from version 3

      That's what I did in my application (which kaim/kinkatta borrowed from, serendipitously enough). When I first wrote it, it was at a furious pace and I put in a quick-n-dirty file format. Then when Qt got XML support, it only made sense to use that instead. So I change the file formats over, but kept the old way around. It now converts automatically from the old to the new (which a info message to the user that it is doing so). It has caused a bit of code bloat, but by the time I reach version 1.0, it will have been long enough to be safe to drop the old way.

      That episode was what got me started in the first place pondering backwards compatibility, and it eventually led me to post this topic's question.

      Or you could use a data format that's a bit more extensible, this seems to be the real problem.

      By using XML, I expect full extensibility. But I can forsee one problem kinkatta may run into (if they haven't already). Using XML is great, awesome, and the Right Thing(tm). But KDE still uses a group/name/value ascii format for its settings files. Is it better to go against the KDE flow by using XML, or use the existing KDE API for settings? Hopefully KDE will switch to XML for its setting in 3.0.

      --
      A Government Is a Body of People, Usually Notably Ungoverned
  14. The same question applies to hardware. by Anonymous Coward · · Score: 0

    Each time we boot the computer it runs in 8086 mode... I get a dos prompt running in my 8086 at 1.4 GHz, with 256 mb extended mem. We need processors that are hardware compatible with athlons or PIIIs, not lower. Also removing the so many hardware legacy chipset functions might just need a small applet from bios emulating the legacy parts of a computer to use the dos mode. we'll end up with much cheaper solutions.. no?

    1. Re:The same question applies to hardware. by Anonymous Coward · · Score: 0

      Are you sure it doesn't boot in 4040 emlation mode? :)

      Offtopic: does anyody have any opinions on good/bad virtual server providers? Searching th net, I've found a few that claim to give you full access over your httpd.conf files (and others), but want to charge $20 to add a virtual host. Is there anybody that doesn't suck?

  15. MS went overboard by MSBob · · Score: 3, Insightful
    Microsoft is the most notable supporter of backwards compatibility. That's a large part of the reason why Win32 is such a bad API. There is just too much junk there that accumulated over they years that seemingly won't ever go away. The other problem backwards compatibility creates is code bloat. Because old interfaces and often implementations have to be kept in the binary the libraries grow bigger and bigger purely to keep the old junk around. Microsoft COM is the most guility party in that. The rule that interfaces can never, ever change results in nosense like DirectX 8 still supporting all interfaces of DirectX2. Fortunately this trend seems to have reversed and everyone is now keen on starting afresh. MS is rolling out their .NET framework. Apple released their OSX which has new native APIs. It's probably for the best to the consumer in the long run as well.

    Luckily open source doesn't have ot suffer from the issue as much since source availability ensures that old software can often be tweaked or sometimes just recompiled to make it work with new versions of dependent libraries.

    How long to maintain backwards compatibility is really the question of your business domain. An in house app can probably be changed significantly without impacting many people while a widget library (like QT for example) must maintain backwards compatibility for at least a couple of minor versions. The ability to simply recompile old code after a major change in the library is a welcome feature too.

    --
    Your pizza just the way you ought to have it.
    1. Re:MS went overboard by Trepidity · · Score: 3, Interesting

      So you're claiming Microsoft is making a mistake by providing backwards compatibility for DOS, but "open source," whose primary operating systems are Linux and FreeBSD, both designed to be backwards-compatible with 1970s UNIX systems, are somehow not?

    2. Re:MS went overboard by gmeb · · Score: 1

      Well, obviously. The question about backwards-compatibility is closely related to the quality of the design used.

      With good design, there shouldn't be a need for breaking backwards-compatibility, and it can be kept as-is for years. If however the design was flawed from the start, you'll need to start over again sooner or later.

      Whether a design is good depends on the designer, but perhaps even more on marketing needs: good design takes time, and marketing often prefers short time-to-market rather than quality products.

      DOS, being more like a feature-rich bootloader rather than an OS, obviously had a flawed design from the start.

      --
      The angry man always thinks he can do more than he can. -- Albertano of Brescia
    3. Re:MS went overboard by SurfsUp · · Score: 3, Insightful
      So you're claiming Microsoft is making a mistake by providing backwards compatibility for DOS, but "open source," whose primary operating systems are Linux and FreeBSD, both designed to be backwards-compatible with 1970s UNIX systems, are somehow not?

      Well, speaking as an experienced Dos programmer, the Dos interface is really a piece of crap. Nothing is defined with any kind of generality or foresight. Look at the "critical error handler" interface for example, it's unbelievably awkward and unworkable. Look at what happens if you shell to Dos, start a tsr, then exit the shell. Boom. This is broken by design. Just try to write a program that recovers control when a child aborts, that's when you find out how messed up the resource handling is, and the exit handling. The child tries to exit back to Dos instead of its parent unless you hack into all sorts of undocumented places, which everybody eventually has to do for a big system. All that undocumented-but-essential internal interface dung has to be supported, right?

      That said, no I don't think Microsoft made a mistake in supporting old Dos code, it's all part of maintaining the barrier to entry, the more messed up it is, the more expensive to replicate. Never mind that the whole sorry tale isn't good for anyone but Microsoft.

      Well, now that we have a several real operating systems as alternatives, there's no longer any advantage to Microsoft in keeping Dos on life support. When Dos gets painful, people just walk now. But Microsoft still has to support it or everybody will start publishing articles about how Windows doesn't work, and they have to keep all those "enterprise" solutions that consist of Dos programs and BAT files running. Now Dos support is just an expensive liability Microsoft can't escape. Heh, but the rest of us can, and do.

      The original Unix interface on the other hand, was quite well designed. 30 years later, for the most part the whole thing is intact and still in use, functioning reliably in enterprise-level multiprogramming environments. So, no, maintaining compatibility with that old-but-good interface is unquestionably not a mistake.

      The short story is: the whole Dos interface was a mistake, and Microsoft now has to live with it. The unix interface was not a mistake and we're happy to carry it forward.

      --
      Life's a bitch but somebody's gotta do it.
    4. Re:MS went overboard by stevey · · Score: 2

      Microsoft is the most notable supporter of backwards compatibility

      Well, if you ignore Intel.

      Intel have keep binary compatibility for decades now, even the latest Pentium III will run code written for the 8086 - maybe with different timing/cycle counts - but certainly the opcodes still do what they used to.

      After playing with reverse engineering, and dissasembly for the past few years I can think of at least several 80[01]86 instructions I've never seen in a single binary - yet they're still there, due to backwards compatability..

  16. Just Think Forwards Compatible by isolation · · Score: 0

    Look at USB 2.0

    --
    Free Unix? Free Windows. http://www.reactos.com
  17. Reminds me of an old joke... by Anonymous Coward · · Score: 4, Funny

    God created the universe in 6 days because He didn't have to worry about an installed base.

    1. Re:Reminds me of an old joke... by Bostik · · Score: 3, Funny

      And that reminds me of a quote I heard some months back.

      "God created the world in 6 days. Perl gods are not impressed."

      --
      There is no such thing as good luck. There is only misfortune and its occasional absence.
  18. browsers? by [amorphis] · · Score: 1

    along the same lines, when do you give up support for browsers that can't render DHTML or CSS?

    After a while your normally sensible and readable code becomes a nightmare spaghetti tangle of conditions, macros and multiple re-inventions of the wheel

    this describes some of my javascript to handle multiple browsers to a tee

    1. Re:browsers? by Anonymous Coward · · Score: 0
      Sounds like you're just a bad programmer. I'm sorry, but there's no particular reason why maintaining legacy code is more difficult than maintaining any code in development.

      As you're talking about javascript I assume you're talking about incompatibilities in browser DOMs. There are free libraries/examples of javascript and how to make it as portable as possible. There's nothing particularly difficult if you use the right tools.

      Too often dropping support for legacy software is an excuse to start fresh because your code has gotten away from you.

    2. Re:browsers? by onosendai · · Score: 1

      Personally, I have drawn the line at Current Generation - 2, Netscape 4.0 and IE4.0.

      --
      <? include ('signature.inc'); ?>
  19. Yeah, it really sucks... by Anonymous Coward · · Score: 0

    ... when 5-year-old games still work.

    Dork.

    1. Re:Yeah, it really sucks... by Anonymous Coward · · Score: 0
      Hell. Yes.

      Now if someone can show me that DirectX has suffered because of it's backwards compatibility then I *might* change my mind. But as I understand it they just add new functions and when it's decided that an old one is flawed they make a new one and leave the old one there (which might permit people to make new code with the older flawed function, though if someone is that ignorant they'll find many other ways of screwing up).

  20. Our very means of communication... by s0matose · · Score: 1

    Let's step into this very medium of communication--the world wide web. All those webpages scattered about the web, code folded over code to assure that users of all variants are able to view a certain page. Page designers have to peruse the web in search of web browser documentation for not only different browsers, but different versions of different browsers. We have to worry about the peons still using version 4 of Internet Explorer and Netscape Communicator! Browser checking is a pain in the neck, and aside from this, IE and NS play the browser version hiding game, so checking their versions isn't a simple one, two, three.

    I wish I knew the answer to when enough was enough, but I am at a loss. I will say, however, that I make my decisions of how far to go back in terms of versions by how much flexibility and usability the older versions offer. Anything less than version 4 of either Netscape or Internet Explorer offers very little in terms of flexible design.

    But honestly, where do we set that limit? I don't think it's the best thing to do to say, "Conform or die!" If that's how things were, then the world would be swarming with Hitler's Nazis.

    "You there! Cake or death!?" Uhh... death, no, no, I mean cake! "Ha, ha, you said death first!" I meant cake! "Oh, alright.. here's your cake. Thank you for playing Church of England, Cake or Death?"

    --

    nature is ancient, stop your rumbling, stop your rushing, and admire it once in a while
    1. Re:Our very means of communication... by Anonymous Coward · · Score: 1, Insightful
      But honestly, where do we set that limit?

      I set it at 1% of browsers using the site. Currently Netscape is about 8%, divided half over windows and half over unixes (see data). I support Netscape 4 not only because of legacy, but because I want to support unixes, and until recently the distributions came with Netscape 4 as their best browser.

    2. Re:Our very means of communication... by Kirkoff · · Score: 1
      I set it at 1% of browsers using the site.

      But you'll leave out these browsers:
      • NCAC Mosaic 1.0 (Ahh the good(bad?) old days)
      • MS IE 1.0-3.0 (ahhhh!!!)
      • AOL 3.0's browser (*Cringe*)
      • wget (Renders beautifly... err wait)
      • Spry Mosaic (Remember "internet in a box?")
      • TiWWW (I'm only guessing someone is sadistic to put a web broser on a graphing calc. I just hope it's a 92, and not the 73+)
      • Telnet users (Kinda like wget they're a small percentage, but a fun percentage)
      • Gopher (If they wrote some kinda converter>
      • xmms/winamp (They pull http, now to write a webpage output plug in and matching display plug in...)
      • amaya (I think even I used it twice)
      • KDE1.x's KFM (see above)

      As you can see you are not allowing 0.0001%(wget excluded) of the internet view your page. These outraged users won't be using your site when they finally mix them in to a telnet client for the Ti82 connected to a VERY SLOW emulator showing mosaic's connection to a web-based gopher site.
      --
      There are exactly 42,935,718 letter sized sheets in a square mile.
  21. Re:The best time... by deranged+unix+nut · · Score: 1

    You might want to update your "facts"

    FYI - Microsoft typically supports interop and upgrade from at least the two prior versions, possibly more depending on what the users are running. For example, even though XP is based on the NT codebase, MS supports upgrade from (and I believe interop with) Win98/Me.

  22. rules of thumb by deranged+unix+nut · · Score: 5, Insightful

    Two rules of thumb:
    1) Support whatever 90% of your users are using
    2) Support the prior two versions

    If you can't do the above, make a clean break and give it a new name or change the major version number and list the changes in the release notes.

    If you have to make a clean break, if possible:
    1) Provide a migration path
    2) Provide an interop interface

    And above all, listen to your users.

    1. Re:rules of thumb by isorox · · Score: 2


      1) Support whatever 90% of your users are using
      2) Support the prior two versions


      Latest stats are showing IE5 to have 82% of the market, IE4 with 6% and IE6 with 1.5% - pretty much 90%

      Another 2% is spiders.

      So Should we only support IE? Or should we support the standard as it is guarented to work in all future browsers as well?

    2. Re:rules of thumb by Ronin+Developer · · Score: 3, Insightful

      If your software is targeted for Linux users, then ask yourself what are the marketing stats of IE on the Linux platform? Or, are you targeting specifically Windows or Macintosh users (in which case IE is the predominent browser).

      If you are targeting the world in general and want to make money or want the widest possible dissemination of your code, then I'd reluctandly say "Yes", give IE preferential consideration over the more obscure browsers. Or, stay conformant to the HTML/XML specs and support everybody that's conformant but be willing to accept the price of losing specific capabilities.

      If you have code that works with Netscape and not IE or vice versa, then why not contract (or develop yourself) for a plugin or activeX control that will provide that capability? Or, bundle an existing control with your code?

      But, that is getting away from the "backwards compatibility" issue. The previous poster mentioned the rules of thumb, of which I wholeheartedly agree. If your code has to change so much that you break backwards compatibility or produce difficult to maintain code, then release it as a new product or new major version number. And, support the last to versions of your product. Makes good sense to me.

    3. Re:rules of thumb by Speare · · Score: 2

      1) Support whatever 90% of your users are using
      Latest stats are showing IE5 to have ... pretty much 90% ... So Should we only support IE?

      That's 90% of YOUR users, not 90% of the market you're trying to penetrate.

      If you wrote WhizzyWord, and 90% of your users have migrated up to v1.2, you can dump any v1.1-only "features" and clean it up. This has nothing to do with Microsoft Word, KWord, AbiWord, WordPerfect or any other word processor app on the market.

      --
      [ .sig file not found ]
    4. Re:rules of thumb by trkball · · Score: 0

      Ack! If I followed that advice, I'd develop for nothing but Windows 98, 95, and maybe some NT. There has to be more to life than that ;-)

    5. Re:rules of thumb by VB · · Score: 2

      • MSIE 5..............63.61%
      • MSIE 4..............18.27%
      • Netscape 4...........7.77%
      • MSIE 3...............4.73%
      • MSIE 6...............3.38%
      • Konqueror............1.73%
      • Gecko................0.52%


      Not sure where you got the 82% figure, but if you design your site based on the most popular browser according to market research rather than the audience most likely to visit your site you may run into trouble.

      Consider a "Best Viewed with Internet Explorer" logo on a Linux Howto site. Probably won't get much traffic...
      --
      www.dedserius.com
      VB != VisualBasic
    6. Re:rules of thumb by isorox · · Score: 2

      I was on about developing general sites. royalmail.co.yk used to be a great site that happily worked. They've (for no reason), changed it now, yo get cookies, javascript etc. all over the place.

      I'm surprised, and plased, that your stats show konq to have such a (relativly) high market penetration. I use it almost exclusivly (occasionally lynx or sometimes mozilla get in the way), but i had no idea so many people did.

      I'm afraid some sites I have to pretend I'm an IE user though - as otherwise I dont get in (even though they work fine in konq and moz)

      My figures were from PC Pro, a UK magazine, October 2001 edition. I havent read it for a long time, and I'm unimpressed by the MS ass-kissing the have in there. I only bought it cause it had a tux on the front, pretty much the entire linux content of the magazine was that one cover picture though :(

  23. Do what Linux Devs do.... by Anonymous Coward · · Score: 0, Interesting

    ...... say 'fuck all' to backwards compatibility.

    (put your head in the sand and mark me down as a troll if you want, but this is one of the HUGEST problems with Linux, especially Gnome)

  24. Or, if you really want to annoy people... by deranged+unix+nut · · Score: 4, Funny

    Release a set of updates, only change the minor version number, break one critical function in each update, fix it and break a different critical function in the next. Repeat until users no longer depend on the functionality that you want to change, then introduce the new functionality.

    But first, go read "How to write bad code," and start following those suggestions too. ;)

    1. Re:Or, if you really want to annoy people... by RacerX69 · · Score: 1

      Shhh...

      You don't want Microsoft to have you arrested on DMCA charges for publishing their programming methods, do you?

  25. "Sharp as a Tack" by PHanT0 · · Score: 0, Flamebait


    You kiss it goodbye when you hear about C#... another beautiful mess brought to you by MS...

  26. User ability by Anonymous Coward · · Score: 0

    1)Pull up your favorite cool beverage (preferably a six pack)

    2)Use Python with your favorite OS any Linux variant

    3)And share good times with 1 million user and growing forums.mtv411.com

    1. Re:User ability by tdelaney · · Score: 1

      Python is a very interesting topic to discuss in relation to backwards compatibility.

      It has three very good baseline versions - 1.5.2, 2.0(.1) and 2.1(.1) - which you can rely on. Jython/JPython has implementations of 1.5.2 and 2.0, and is well on the way to 2.1. Code written for 1.5.2 will work with 2.0 (unless it relies on an extension unavailable for the newer version). Likewise, code written for 2.0 will work with 2.1.

      However, Python is currently undergoing a period of change which will mean that 3.0 will *not* be backwards compatible in some pretty major ways. Very little of this behaviour will be mandatory until 3.0 (generators and possibly nested scopes are the only two which are likely to be mandatory before 3.0). This includes a major semantic change in the use of the '/' operator. Currently,

      3/2 == 1

      whereas in the __future__ ( ;) for Pythonistas), '/' will always return a numeric result (whether that be floating point, fixed-point decimal, rational, or a transparent mapping between them is still up in the air - at this point Python only *has* integer and floating point representations) and the new '//' operator will always return an integer result rounded towards -infinity, regardless of whether the operands are integer or not.

      Additional changes will include the unification of int and long, the unification of types and classes, and quite a number of other changes.

      The Python community made its views very strongly that any such major changes should only be introduced with a new major version number - in particular, any semantic changes. Generators are likely to become a non-optional part of the standard release before 3.0 simply because they are introducing completely new functionality - the backwards compatibility issue is with the new 'yield' keyword, and there has been general acceptance that the new keyword will not cause large amounts of code breakage.

  27. Isn't it so amazing? by Anonymous Coward · · Score: 0

    It never ceases to amaze me how hypocritical some of you are. The guys here that are all for breaking backward compatibility are also the ones that complain endlessly when old DOS applications can not be run on Windows platforms. Why the double standards??

  28. Re:The best time... by Anonymous Coward · · Score: 0
    Microsoft typically supports interop and upgrade from at least the two prior versions[...]

    This is an argument in favor of Microsoft's interoperability and upgrade policies?

    Isn't it ridiculous that you are happy with only the latest two version talking to each other?

    Are you happy with paying MS full-price even if you are upgrading from Windows to a later version of Windows?

    I have not met that many people who like to take it up their ass that bad, even if it is Bill Gates doing the fucking!

  29. .. by Axe · · Score: 2, Funny
    ..I felt some irony in the fact that I launched compilation that will break a lot of things, loaded Slashdot (Why? - I missed a click in the history list - I really wanted some good porn, but that's close enough) and saw a new article suggesting "to kiss backward compatibility good bye".

    I thought it is a sign. ;-)

    --
    <^>_<(ô ô)>_<^>
  30. As a rule of thumb... by bluephone · · Score: 1
    I generally don't bother worrying aboutthings mroe than 3 years old. For Windows platforms, anything older than Windows 98 is unacceptable. With web development, I'll make sure it (whatever it may be) works in NS4 and IE4, but I target IE5 and now NS6 and Mozilla (yes, I know this breaks my rule, but it's a rule of thumb, and on my thumb, Internet years are shorter than human years). For Linux, anything older than a 2.0 kernel is not worth it, if even that old. I don't think 2.2 would be unreasonable. For hardware, I'm not going to worry about anything less than 400MHz, either a K6-2, or Pentium 2.

    Yeah, it's a bit harsh sometimes, but in the real world, if something is REALLY useful and necessary, people will do what they have to do to get and use it.

    It's good to keep in mind older platforms, but there comes a time to cut off the dead weight. No matter where you draw that line, it's going to be tough for someone. Rather than making it too tough on the developer, or too harsh on the platform, I think the approach I've taken balances the two.

    --
    jX [ Make everything as simple as possible, but no simpler. - Einstein ]
  31. Microsoft's solution... by Anonymous Coward · · Score: 5, Informative

    I like Microsoft's solution, which I'm sure was done somewhere else first. At any rate, here's the situation...

    Microsoft face the issue that they want to maintain backwards compatibility with everything, so they can leverage off the existing popularity of their platform. This means they can't let new libraries break old applications.

    They had a problem once with MFC, where they updated its memory allocation scheme to make it more optimal. Problem was, a whole lot of old apps happened to work because they accessed memory incorrectly, but the old memory allocation scheme didn't reveal their bugs (I think they were doing buffer overruns, but the old scheme allocated a bit of extra room). Anyway, Microsoft released an updated MFC DLL, and suddenly old applications started breaking. It wasn't really MS' fault, but it was a big event, and I think it was the last time they touched old code like that!

    Anyway, this is where they have their "DLL hell" problem too. Different apps are written against different versions of a DLL, many times with workarounds for known bugs in those DLLs. A new DLL comes along (installed by another application) and suddenly working applications start breaking.

    So here comes COM. I've encountered it with DirectX, and it works like this. When you request something like a DirectDraw object or a DirectDrawSurface object, you also tell the class factory what *version* of the interface you want. Then you're provided with that actual implementation of the library. If you write your game against DirectX 2, but the user has DirectX 5, well your request to the DirectX DLL will actually give you the version 2 implementation! Which is cool, because if you worked around old bugs, those bugs are still there; they're not fixed for you! :)

    As far as I know, you're not getting an "emulation" of the old implementation either; I'm pretty sure they just include binaries for each version of the interface. They could easily dynamically load whichever one you request.

    Of course it means bloat, but there's no other solution. If you want backwards compatibility, you can't fake it, because it's all the really subtle things (like bugs that people worked around) that will bite you in the butt. It's been Microsoft's nemesis but its strength through the years, just as it has been Intel's too. Both companies need to remain backwards compatible with a *LOT* of stuff out there, and so they're forced to have all this legacy architecture. It would be nice to start from scratch, but then they'd be levelling the playing field, and that's no fun :)

    Of course, this backwards compatibility drama affects everyone, not just Windows people. Just the other day someone installed a new PAM RPM on my Mandrake Linux. It installed fine, being a newer version, but some subtle change in behaviour meant I could no longer log into my own box. That's no fun either :)

    - Brendan

    1. Re:Microsoft's solution... by billh · · Score: 4, Interesting

      Oddly enough, when Altavista first came online, I used it frequently for trying to resolve DLL conflicts. Probably more than I used it for anything else.

      Sad to think that I can now find just about anything on the internet, and it all started because I had to support Windows 3.x.

      But it is nice to think that I was running Linux as my primary box in my office in 1995, using lynx to browse as I debugged my new Windows 95 installation on my other box.

      Just food for thought for the younger admins out there: DLL hell was the largest part of my job at many sites. Believe it or not, it has gotten much better in recent years. Think of video drivers messing up fax software, network drivers killing the accounting package, and video conferencing software killing the spreadsheet program. As sick as it sounds, Win 9x is a dream to support by comparison.

      4:30 in the morning, I must be getting delusional. :)

    2. Re:Microsoft's solution... by DavidAtkinson · · Score: 1

      Don Box discusses it in his book 'Essential Com'. It's a very nice system. It's saved my employer many hours of developer time over the years.

    3. Re:Microsoft's solution... by doug363 · · Score: 5, Informative
      Much of Microsoft's problems don't just stem from multiple versions and fixing bugs (although I agree, these are significant), but badly thought out design in the first place.

      Also, when there is an opportunity to make a clean break (i.e. the Win32 API), they only make half the changes they should or could. Have you seen the number of functions which end in "Ex" in the Win32 API? Ever noticed how the Win9x series is full of 16-bit user interface code? Or how only half of the NT kernel objects are supported under Win9x? In DirectX, it took between 4 and 8 major versions of DirectX to create something which was really worthwhile (depending on your opinion), and major changes weren't implemented when they should have been.

      In regards to using COM, this helps versioning, but does not help the bad design problem. Even with full versioning, COM interfaces still have reserved fields in them, which is unnecessary if you're bundling all the previous versions.

      Besides, not all compatibility problems can be solved by COM etc. Microsoft are getting better at providing slicker interfaces, but I don't feel that the underlying design is improving as it should be. For example, using Automation objects (which is a disgusting kludge for VB "programmers", to put it nicely) in Office apps is still a pain. (In particular, Outlook 2000's object model and MAPI implementation is inconsistent and buggy as hell.)

      So yes, versioning does help alleviate backwards compatibility problems where they can't be avoided, but nothing is a substitute for good design.

    4. Re:Microsoft's solution... by martinflack · · Score: 1
      So here comes COM. I've encountered it with DirectX, and it works like this. When you request something like a DirectDraw object or a DirectDrawSurface object, you also tell the class factory what *version* of the interface you want. Then you're provided with that actual implementation of the library. If you write your game against DirectX 2, but the user has DirectX 5, well your request to the DirectX DLL will actually give you the version 2 implementation! Which is cool, because if you worked around old bugs, those bugs are still there; they're not fixed for you! :)

      I'm not much of a C coder (I use perl) but my basic understanding of unix dynamic libraries is that the application requests a library name and this gets resolved to a file in /lib or /usr/lib. ldd reports that some of the binaries in /bin on my RH system contain what looks to me like a version number in those library names (e.g. libc.so.6 or libnsl.so.1).

      So aren't we doing it similarly in unix? Is it common for package managers who put out packages for libraries to bundle all the old binaries with it? Should they?

    5. Re:Microsoft's solution... by SurfsUp · · Score: 2
      So here comes COM. I've encountered it with DirectX, and it works like this. When you request something like a DirectDraw object or a DirectDrawSurface object, you also tell the class factory what *version* of the interface you want. Then you're provided with that actual implementation of the library. If you write your game against DirectX 2, but the user has DirectX 5, well your request to the DirectX DLL will actually give you the version 2 implementation! Which is cool, because if you worked around old bugs, those bugs are still there; they're not fixed for you! :)

      And neither are the exploits.

      --
      Life's a bitch but somebody's gotta do it.
    6. Re:Microsoft's solution... by error0x100 · · Score: 1

      I thought Microsoft "solved" this problem indirectly by just stopping actually modifying their software :) With little to no incentive to improve, their software has gone through several years of notable stagnation. I suspect we no longer see MFC DLL version problems because MFC has hardly changed in the last two to three years.

      You are right about DirectX .. any release of DirectX includes all previous versions of DirectX .. this is generally a good thing, because in spite of the slight bloating, all your older games still run .. with full "bug for bug" backwards compatibility, because all the binary code is actually there.

      Backwards compatibility is, on the whole, a good thing, even though it can be a PITA for developers ... though its a bit weird to think that even the latest GeForce3 from NVidia still has a section of its circuitry devoted to handling CGA and EGA video modes :)

    7. Re:Microsoft's solution... by dillon_rinker · · Score: 2

      Funny...I remember doing tech support for Windows 95 at a major OEM in the late 90s and having DLL problems that most have never dreamed of. Imagine installing the OS, installing an upgrade to the OS (USB support), installing a motherboard driver (AGP, I think), installing a video card driver, and installing a hard disk controller driver. Imagine having a broken system if you installed them in the wrong order. THAT is what I think of when I think of Microsoft. The fact that they permitted mere applications to overwrite crucial OS code was unforgivable.

    8. Re:Microsoft's solution... by mimbleton · · Score: 2, Interesting

      "Ever noticed how the Win9x series is full of 16-bit user interface code"

      Windows95 design team had clear objectives:
      1. We need OS with protected memory etc ...
      2. It MUST run 99% apps from Win 3.11

      The only way to accomplish that was to retain tons of old 16 bit code and wrap it around with 32 bit stuff. Windows 95 is actually one of the most amazing pieces of software ever written.
      Consider the fact that average RH has problem running most apps written mere year before that particular version was released.

      "Or how only half of the NT kernel objects are supported under Win9x"

      That is genuinely MS fault. They had communication problems between NT and Win 95 teams.

  32. Re:Fukk LINEX! Do it... by jquirke · · Score: 0, Offtopic

    No your quite obviously the FAG. must this continue?

  33. Major version breakage by rjh · · Score: 4, Insightful

    Commit yourself to a strict policy: nothing in a minor version will break anything since the last major version. If your code is at 1.9.99, it should be backwards-compat with 1.0.0. If your code is at 1.1.0 and backwards compatability breaks, move it to a 2.0 release.

    Typically, users expect breakage--or, at the very least, problems related to upgrades--with major versions. With minor versions, they don't expect breakage.

    Follow the Law of Least Surprise. If you break backwards compatability, up the major by one.

    Insofar as when to break backwards compatability, that's a much harder question. The obvious answer is a little philosophic: not all engineering problems can be solved by saying ``screw backwards compatability'', and some engineering problems cannot be solved without saying it.

    The trick is learning which is which.

    1. Re:Major version breakage by Anonymous Coward · · Score: 0

      Yes - for example this is what the KDE version number indicates. If the major version number is the same, the applications are binary compatible. They generally only break binary compatibility when moving to a new major release of QT (which also follows this version numbering scheme).

  34. whatever by Anonymous Coward · · Score: 0

    whatever..

  35. Compatibility in formats and protocols by Skapare · · Score: 4, Insightful

    A lot of the discussion seems to be related to issues of things like programming languages and operating systems (which are important). But what about keeping up with old formats and protocols? I think the issue is more one of what your project works with, than it is what language you choose (including the OS as part of the former).

    • Should a new web server support older versions of HTTP to the extent that they are not proper subsets of new versions?
    • Should my mail server support POP3, or can I make it do IMAP4 only?
    • Should my web site require every browser have cookies, Javascript, and Java enabled, or should it at least function with browsers that doesn't have these, or don't have them enabled, or have them filtered at the firewall?
    • Should I support ISO-8859 character sets, or can I just stick to Unicode (UTF-8 and maybe also UTF-16) to be universal?

    I'm not so much looking for specific answers to the above questions, but rather, a general idea of how you think one should go about deciding those issues to come up with the best answers in some given situation.

    --
    now we need to go OSS in diesel cars
    1. Re:Compatibility in formats and protocols by thogard · · Score: 1

      If you use existing tools, you may not have to make that decision. Remember that unix is a collection of tools that are each designed to to part of the job and do that job very well.

    2. Re:Compatibility in formats and protocols by spitzak · · Score: 2
      I think you can drop support for all ISO character sets other than ISO-8859-1. This will eliminate a lot of problems because when only one set is supported, all code that has to decide which set to use can be deleted!

      UTF-8 and ISO-8859-1 can be supported at the same time for all real documents. This is done by treating all illegal UTF-8 sequences as individual 8-bit characters, rather than an "error". This also makes programming easier because there are no "errors" to worry about. For an ISO-8859-1 document to be mis-interpreted under this scheme you would need an 8-bit punctuation mark followed by two accented characters, which is not likely in any real European document.

      It is also necessary to treat UTF-8 sequences that code a character in more bytes than necessary as illegal, this is vital for security reasons.

      I am also in favor of adding MicroSoft's assignments to 0x80-0x9F to the standard Unicode. These are pretty much standard in the real world now anyways. This will make some more sequences (one MicroSoft symbol followed by one accented character) mismatch under the above scheme, but you are likely to get such documents anyway whether you interpret the MicroSoft characters or not.

    3. Re:Compatibility in formats and protocols by dvdeug · · Score: 2

      > UTF-8 and ISO-8859-1 can be supported at the same time for all real documents.

      And we can forget about the rest of the world that doesn't use ISO-8859-1 or UTF-8? This will hopelessly munge any documents in a different charset; whereas a UTF-8 interpreter could realize it wasn't a UTF-8 document (and probably load in up in a locale charset.)

      > This also makes programming easier because there are no "errors" to worry about.

      But you've added another case to everything that has to handle UTF-8, and ignored real errors.

      >It is also necessary to treat UTF-8 sequences that code a character in more bytes than necessary as illegal, this is vital for security reasons.

      Why? You've just introduced alternate sequences for characters (the whole security problem) in another form.

      >I am also in favor of adding MicroSoft's assignments to 0x80-0x9F to the standard Unicode.

      Huh? All the characters are in Unicode. To mess with preexisting characters (that date back to Unicode 1.0) to add yet more redundant characters isn't going to happen, and shouldn't; you shouldn't break backward compatibilty unless there's at least a benefit.

    4. Re:Compatibility in formats and protocols by The_Myth · · Score: 1

      I am currently developing a web site to teach theology over the internet.

      This covers audio of lectures, class notes and readings - amongst a dozen other functions.

      We chose to base everything so that a HTML 3.2 broswer would ben able to display the pages. It is not pretty but is passable. From there we optimised for IE 5.5 as most of our users had that as their preferred browser.

      At the end of the day It came down to what did the bulk of users have, (Primary choice) and how could we accomodate future users in our industry and target market (Secondary Choice).

      These two choices are where you decide on backward compatibility. We could have gone right the way back to creating a text only version of our site but I have better things to be doing than that. If a significant number of users wanted that then thats a different matter.

      --
      The MyTh - I am a figment of the Imagination - [Im Probably even not here]
    5. Re:Compatibility in formats and protocols by spitzak · · Score: 2
      And we can forget about the rest of the world that doesn't use ISO-8859-1 or UTF-8?

      Yes we can forget about them. This is because it will eliminate the need to transmit "which character set this is in". This will be an enormous win for software reliability!

      But you've added another case to everything that has to handle UTF-8, and ignored real errors.

      No, my whole point is that there is only *ONE* case, which is "handle UTF-8 but if the characters look illegal, display them as single bytes". At no point does a program have to think about whether a document is ISO-8859-1 or UTF-8, it just assummes UTF-8 at all times.

      You've just introduced alternate sequences for characters (the whole security problem) in another form.

      Only for characters with the high bit set. This is not a security problem. The problem is bad UTF-8 implementations that allow things like '\n' and '/' to be passed through filters by encoding them in larger UTF-8 sequences.

      Huh? All the characters are in Unicode

      Yes, but not at the MicroSoft code points. The problem is that if this is not a standard, programs are forced to examine the text before displaying it (because there are a huge number of documents out there with these characters, and they are not going to go away!) I also think the standards organizations were stupid for saying these are control characters, if they had assigned them we would not have MicroSoft grabbing them.

    6. Re:Compatibility in formats and protocols by dvdeug · · Score: 2

      > This is because it will eliminate the need to transmit "which character set this is in".

      On one hand, UTF-8 alone can do that, without this Latin-1 hack. On the other hand, this in no way solves that, as you still have to deal with ISO-8859-(2-16), SJIS and a dozen other character sets that aren't just going to go away.

      > At no point does a program have to think about whether a document is ISO-8859-1 or UTF-8, it just assummes UTF-8 at all times.
      What makes ISO-8559-1 special? ISO-8859-1 only may as well be ASCII only for most of the world.

      > Only for characters with the high bit set. This is not a security problem.

      Yes, it is. It's a little more elaborate, but you can still get into cases where one program checks the data, say forbiding access to directory e', but misses the access to e' because it's encoded differently.

      > programs are forced to examine the text before displaying it
      I prefer my programs to get it right, rather than do it quick.

      > because there are a huge number of documents out there with these characters

      Plain text documents? Not so much. The number of plain text documents is probably much smaller than by the number of KOI8-R plain text documents.

      We have a solution - it's called iconv. iconv will handle all sorts of character sets, not just ISO-8859-1 and CP1252. (Actually, you don't completely handle Latin-1 either, since there are valid Latin-1 files that are valid UTF-8. But we can just handwave that away until someone gets bit by it.)

      > the standards organizations were stupid for saying these are control characters, if they had assigned them

      They did assign them. Single shift 1, single shift 2, etc. If the characters were needed, that's what they should have been used for, Microsoft be damned.

    7. Re:Compatibility in formats and protocols by spitzak · · Score: 2
      I think ISO-8859-1 is special because it is used much much more than 2-16. For the normal world it *is* ASCII. Therefore I think the best bet is to have programs guess that text that appears to not be UTF-8 is ISO-8859-1.

      Good point about the security problem, though. I have described a way in which there are two encodings for the same character. I was mostly concerned about avoiding the possibility of punctuation marks and control characters, but foreign letters are a possibility.

      Maybe it would be best to make the API pure UTF-8 (illegal sequences turn into the Unicode error character). My idea would be best done by applications upon recipt of external text. They could also do guessing as to the ISO-8859- state by checking the spelling of words, etc.

  36. It's not time for backwards compatibility yet! by fluor2 · · Score: 1
    It's not time for backwards compatibility yet! I prefer looking at the computer innovations since 1980 and drawing parallells to the innovations of the car. Everything is similar whitin engine sizes and stuff, however the computer engine has improved like 100% every 3 years. Thats why it's no time for backwards compatibility yet!


    It's like we should still support the first T-Ford, allowing cars who run at 10mps on our highways.

    I laugh when Linux people try sending fancy mail with just text-characters (no html fonts and no including of images within text to explain figures etc). Ok ok ok I like outlook :) (and i DO NOT care about viruses, they have never destroyed anything in my life)


    Wait another 5 years before talking about backwards compatibility!

    1. Re:It's not time for backwards compatibility yet! by Anonymous Coward · · Score: 0

      It's like we should still support the first T-Ford, allowing cars who run at 10mps on our highways

      I wish my car could run at 10mps. That's 36000mph. Add some stealth technology and I'd be good to go.

  37. Best advice here so far by Sagarian · · Score: 1

    Is this post.

    I'd also say that the key is managing expectations of your users. If you're in a commercial development environment, make sure you have plans in your first contract for what guarantees you will or will not provide for future forward compatibility.

    And, if your major versions break key compatibilities, provide a migration path! That path can be packaged consulting, scripts that mangle / migrate data and code, whatever you can do to reduce the pain. That is, if you ever want to sell to those customers again...

    But again, the best advice is just to listen to your users

    Unless you're working one some free open-source thing. Then your users didn't pay you jack, and you're the programmer, so you know best, right?

  38. Re:The best time... by jquirke · · Score: 1

    Hey dickhead, the keyword in your excerpt was 'least'.

    And it sounds like your the one taking it up the ass.

  39. Bassackwardness by huckda · · Score: 1

    I feel that if you are developing commercially that it is your obligation to make things as easy for the END USER as possible... BUT!!! If you are developing for an open-source project and the like and are contributing to the PROGRESSION of the source...then code it right the first time and let someone else with more time on their hands and the NEED port it for bassackward compatability =) --Huck

    --
    "Just Smile and Nod." --Huck
  40. Screw it by bee-yotch · · Score: 1

    I say screw backwards compatibility all together. Everyone wants to buy new computer parts, this just gives them a better excuse to do so. ;)

  41. This really isn't on topic but... by RyuuzakiTetsuya · · Score: 1

    I believe that Backwards compatability should be handled at the OS level. MS could've easily ditched piled on Win16 and DOS support by just emulating it, applications could be signed for what types of systems it could run on, based on which libs were called, etc. (hopefully Hello World! should run on every machine. I wouldn't be surprised if a cout "Hello World!" made an XP box crash and burn) or maybe just signing it at the Makefile level.

    Or something.

    --
    Non impediti ratione cogitationus.
    1. Re:This really isn't on topic but... by SilentChris · · Score: 2

      Uh, it is emulated. Windows XP has both thunking calls for Win16 apps, and a virtual DOS machine for DOS apps. By default, no direct calls to hardware are allowed in an NT system.

  42. Make incentives to upgrade... by frleong · · Score: 1

    Look at the web sites. Most of them no longer support any browser version less than 4.0 (be it IE or Netscape). I haven't heard complaints about that so far. Why? Because it gave them better web browsing experience, so they have upgraded. Consider this point for your own apps to see if it is worth to support older versions. Is there too many data? What about migration costs? There is no simple answer to this, and random answers (including this one) at slashdot may only confuse more than help.

    --
    ¦ ©® ±
    1. Re:Make incentives to upgrade... by Ziviyr · · Score: 1
      Bleh. IE is backwards. It assumes the web coder is a moron and hance does stupid things to HTML to make stupid HTML work. Hence breaking real HTML and forcing sites aimed to people using IE to screw up their HTML so it looks right.

      Nowadays when people say HTML they often mean javascript of flash anyways. I'm unhappy with this mutilation of standards.

      --

      Someone set us up the bomb, so shine we are!
    2. Re:Make incentives to upgrade... by VB · · Score: 2


      Sure, most sites require 4.x+ browsers, but they don't have to. Coding should be done on the server, not the client. CSS should be inlined rather than included, and IE3 works just fine.

      Making incentives to upgrade is not a design decision; it's a capitalist decision.

      --
      www.dedserius.com
      VB != VisualBasic
    3. Re:Make incentives to upgrade... by Anonymous Coward · · Score: 0

      CSS should be inlined? Tell me you don't mean that.

  43. Re:The best time... by itarget · · Score: 1

    Software designed for Win2000 or XP won't run on 9x/ME. Likewise a copy of MS Word 6.0 can't read a .doc from Word 97 or 2000.

    A nice side-effect (for MS anyway) is that this forces upgades if you want to be able to keep exchanging documents.
    What happens when a new MSWord (w/new .doc format) will only run on XP? You either upgrade your office suite [b]and[/b] operating system or you stop receiving documents.

    The "facts" don't need updating. Just your interperetation of what the AC had to say.

    --

    "Where shall the word be found, where will the word resound? Not here, there is not enough silence." -T.S. Eliot
  44. Alanis by telstar · · Score: 1

    Try telling that to Alanis ... she managed to sell a shitload of albums her misuse of ironic.

    1. Re:Alanis by Anonymous Coward · · Score: 1, Funny

      Well Alanis, being God, was certainly smarter than you. A song named "Ironic" that didn't actually have an examples of irony - now what on earth would you call that?

    2. Re:Alanis by agentZ · · Score: 2

      Marketing.

  45. A few thoughts by Telek · · Score: 5, Informative
    I know that we had to make the decision to redesign our flagship product, and it was a tough one (since this product was the core of about 5 other products in house as well). The problem was:

    Code was ugly and hideous

    Someone forked the tree a while back, and now we had to support 2 seperate source trees (this one was really annoying, because if fix a bug and change some behaviour in one side, since both sides had to be able to talk to each other, you'd have to introduce a corrosponding "fix" in the other side.

    The core architecture was woefully outdated and ineficient

    Speed was an issue, and the current architecture was limiting, and the code was optimized about as well as it could be (this was also part of the uglyness problem)

    we were spending about 70% of our time fixing bugs in the old code, it took this much time because they were little and stupid and with the code in the state that it was in it took forever to trace things down.

    Well, we had been wanting (desperately) to redesign from the ground up for a while, but the powers-that-be wouldn't give us the time, until one customer asked for a feature, marketing promised that they'd get it, and we said "Know what? We can't do that. Not with the current infrastructure." So the powers-that-be said "do what needs to be done!" and we said "yipee!".

    Moral?

    How much extra time is spent during debugging code that is due to the current state of the code?

    How does the core architecture compare to what you will need in the future? Will it support everything?

    How efficient is the old codebase, and how efficient does it need to be?

    Can you get the time required to do so? This is a one-step-backwards before two-steps-ahead thing.

    Do you trust the people that you are working with enough to be able to competantly and efficiently create the new architecture? This is a serious question, because I have worked with some people that are good if you tell them exactly what to do, but I wouldn't trust them to recreate everything.

    Will you be required to keep the old codebase going while you are in the process of converting? If old customers need bug fixes, you might be forced to keep the old sourcebase around for a while.

    Can you make the new design backwards compatible? If not, can you provide a wrapper of sorts, or some easy way to convert your customers from your old version to the new one?

    If you are going to be redesigning the user interface or the API at all, then you must also think about the impact on your customers.

    Just some food for thought.

    --

    If God gave us curiosity
  46. Which UNIX to support? by Skapare · · Score: 3

    A feature that exists in the major UNIX systems, but is not part of the standards, will majorly improve the performance of my project, and make it a lot easier to code up. Should I use it or not?

    Of course the question is vague. I didn't state which systems and for a reason: I don't want to focus on the specifics (although I do have a specific case in mind), but rather, I want to focus on the general principle with this issue. Just how far should I go to make sure my program works on every damned UNIX out there? How much is important?

    --
    now we need to go OSS in diesel cars
    1. Re:Which UNIX to support? by Arandir · · Score: 2

      My problem is the opposite. I want to use the existing standards as much as possible. But I am aware that not every system has them implemented. And even if new systems fully implement them, there's a lot of older versions installed out there that don't.

      I don't have the resources to support every Unix system out there. No way, no how. So I want to use the standards. But it will mean saying "no" to a lot of people.

      --
      A Government Is a Body of People, Usually Notably Ungoverned
  47. Re:The best time... by Anonymous Coward · · Score: 0

    The original AC says thanks, fam.

  48. Re:The best time... by deranged+unix+nut · · Score: 2, Informative

    Why does every topic discussion have to turn into a anti-(insert favorite company to hate) bash?
    [this really should be off-topic, but this is the type of user complaint that you will get if you don't carefully coordinate with your users before breaking old functionality]

    1) Software developers writing software for XP can write it so that it is compatible with 9x/me or even Win3.1 if they want.

    2) The topic question was backwards compatibility. Very few applications (if any) are 100% forward compatible. If you save your Word 97/2k/xp doc in a Word 6.0 compatible format, Word 6.0 can read it just fine. Where is the logic in expecting Word 6 to read the native file format that contains new features in Word 2k?

    3) How does it become Microsoft's problem when 3rd party application programmers don't design their software to run on multiple versions of the OS? (It is possible, in fact a large percentage of the win9x software runs on w2k without being *designed* for w2k.)

    Think about it for a second, how do you make the application that you released last year so that it will be 100% compatible with the file format and the new features that you will dream up next year??? Even if the file format was compatible (which would probably make it a kludge), there is no way that the functionality would be compatible.

    And, umm, you can always save in the previous version's file format. :)

    How is this any different from the new perl script to configure IPchains that won't work on kernels prior to IPchains? Or any other added feature for that matter...this is a flaw in your expectation, not evil marketing.

    Do you expect your Netscape 1.0 browser to be able to handle CSS??

  49. Its about competition by Anonymous Coward · · Score: 0

    I think the biggest thing to consider in how you revamp your code is...will the users stay loyal to you and update? For instance...Many Mac uses seem to be willing to make a big jump to OSX but there is the large risk that some apple users might jump ship. I know OSX will atrack many users as well but the added cost in advertising new features is yet another cost.

    In some software cases, can you even aford to put your customers through any trouble at all?
    csfacc@mac.com

  50. Re:The best time... by Anonymous Coward · · Score: 0

    Realistically, non-server software designed only for NT/2000/XP is 5 years out. It would be nice if Win98 went away with a snap of Bill Gates' fingers, but outlived it's mission by 4 years and isn't going to go away anytime soon.

  51. Re:The best time... by Anonymous Coward · · Score: 0

    [argument weak here - insert profanity]

  52. Thanks, Cliff by eAndroid · · Score: 1

    Since when did Ask Slashdot become Answers from Cliff?

    --

    I can't spell or type, but that doesn't mean I'm unusually stupid.
  53. Unix 2 by ColdGold · · Score: 1

    I apologise for my my ignorance but just what is Unix 2?

    Unix is Unix and Linux is pretty close but Unix 2 is something that I have heard mentioned various times recently but the actuality escapes me.

    1. Re:Unix 2 by Fenris+Ulf · · Score: 1
  54. Steve Balmer has the right idea by my+brain+hurts · · Score: 1
    To those who think the user should conform to developers, instead of vice-versa, I have four words for you:

    Developers, developers, developers, developers.

  55. Re:The best time... by unapersson · · Score: 1

    Do you expect your Netscape 1.0 browser to be able to handle CSS??

    I'd expect my Netscape 1.0 browser to be able to view an HTML page that contains CSS, yes. The pages should still be perfectly usable without CSS (unless the designer is a complete incompetent).

  56. Migration Tools by ImaLamer · · Score: 2, Informative

    Lets say you are developing an app that works with a certain set of data and it is stored one way.

    With your new release (to 2.0, or whatever) that is a whole new work - you bundle tools to convert the old data.

    MS does this with office, and people sometimes think its a pain, but I do not. If I'm getting a new version that (sometimes) works better, I don't mind running it through a filter - but make sure you don't make the mistake MS has made. Make sure this filter works.

    If you're talking a new OS or other such projects - create data (read: settings) BACKUP tools. If you want the people to all migrate to this new OS, or large system application, give them a tool to backup those old settings and put the code right into you're new version to grab those old settings from the backup.

    Thats all we want!

  57. Never by neitzsche · · Score: 1

    The only time you should *not* be backward-compatible is when you want to be embarassed.

    If you are saying you can't make it as good as the old version, you are retarded. I don't mean that only as a jibe exclusively to Microsoft either - if you cannot meet the basic requirements of doing what the old version did, then you are as evil as a mojor vendor that decides to not support plugins.

    --
    "God is dead." - Frederik Nietzsche
    1. Re:Never by sydneyfong · · Score: 1

      try compile and run linux0.1 and i'll give you a karma for each program which runs without any problem (ok, i can't REALLY give you karma points ;-)

      Sometimes there are reasons why you wouldn't like to support the older versions aside from $money$ issues. just imagine everyone believed that the earth is flat and is the center of the universe just because they wanna to be backward compatible.

      --
      Don't quote me on this.
  58. The 5 stages of coding by Anonymous Coward · · Score: 1, Funny
    The 5 stages of coding:
    • Denial - Stating that legacy code should stay in place until the end of time.
    • Anger - Showing signs of anger towards said legacy code.
    • Self-bargaining - Bargaining with one's self about what legacy code should stay and what should not.
    • Depression - Usually accompanied by guilt - When you realize you removed the wrong bit of code and checked it back in without reviewing the changes.
    • Acceptance - Re-writing most of the code since it's all buggered-up, anyhow.
  59. Re:The best time... by Trepidity · · Score: 2

    Generally, however, old Netscape browsers will just crash on newer pages, even if the pages are 100% W3C standards-compliant. That's simply because they follow standards that the Netscape team never envisioned (and through some rather sloppy coding didn't properly prepare for).

  60. Analogy by noz · · Score: 4, Funny

    "Programming is like sex. Make one mistake and support it for the rest of your life."

    1. Re:Analogy by Anonymous Coward · · Score: 0
      ++ to that. :-)
      This is one of the funniest thing I've seen on Slashdot for a while, the author deserve an Academy Award or a Nobel for that or something.

      I'll use it for sure at my job, it is just too true.

  61. Tips by Fellgus · · Score: 1

    1) Refactor early! Refactor the code and API as soon as you been suspect that it isn't going to be scalable/maintainable in the future. The longer you wait, the more unmaintainable the code gets and the more users will depend on your API. If a part of the API was a design mistake from the beginning, change it asap! Both you AND your users will benefit from the change (even though some will complain)

    2) Make it "reasonable" backwards compatible. I.e. there is no reason behind supporting gcc-2.7-series. C++ compilers are lacking behind the ISO standard, but most are cathing up. Don't avoid exceptions because "some compilers doesn't support it". Some compilers doesn't, but exceptions has been around for 10 years! Time to force your users into an upgrade, I say.

    --

    -larsch

  62. Only durring beta by SnapperHead · · Score: 1

    I will only say screaw backwords compatibilty durring beta, after that, I am sticking with the code until the next development cycle. Thats why I prefear to keep an application in beta much longer, I have more room to grow.

    A lot of times it comes down to the application and how many changes are happening. If your making releases every week. You kinda need backwords compatiblity :) If its every few months, its sorta important, but not a requirement. If theres a release every year, screaw it :)

    The size of the application also makes a big difference. Smaller project may not need to worry about it. Very large projects need to worry.



    All in all, its not a "black and white thing", you won't find the answer in a text book. It depends on your goals, what your doing, the size of the project, etc etc etc. Every project is different.

    --
    until (succeed) try { again(); }
  63. Just use it the way it was designed... by frost22 · · Score: 1

    This is nonsense.

    If those web designers would stop coding artsy-fartsy crap and stayed with simple formats there would be no problem even with archaic stuff like Mosaic

    I am so tired of so called designers who go out of their way to press a flexible text presentatation system into their stupid little icon tricks. Pixel scale positioning - pfffft! Text as Images - pffft! Font sizes mandated by NaziStyleSheets - pffft pffft!

    f.

    --
    ...and here I stand, with all my lore, poor fool, no wiser than before.
  64. The 7 stages of coding by ColdGold · · Score: 2, Funny
    The 7 stages of coding:

    Enthusiasm - I can make this baby fly!


    Doubt - Something's not working here


    Denial - Stating that legacy code should stay in place until the end of time.


    :try_again


    Anger - Showing signs of anger towards said legacy code.


    Self-bargaining - Bargaining with one's self about what legacy code should stay and what should not.


    Depression - Usually accompanied by guilt - When you realize you removed the wrong bit of code and checked it back in without reviewing the changes.


    Acceptance - Re-writing most of the code since it's all buggered-up, anyhow.


    Goto :try_again

  65. That's why open source exists for... by Ektanoor · · Score: 2

    The problem with M$ is not they always break something. The problem is that they break something and don't give a chance to fix it.

    That's why open source exists for. If things get broken, then, there is a very high chance to fix things up if one has access to code and gets an idea of the new features, bugs and innovations. If a developer thinks he is doing right on going away from standards and practices, then let it be. He is the author and he knows best what he may want or not. However, he should care that the people, dependent of his creation (aka users), will have a chance to readapt. On open source, a developer may not have to worry too much on this, because, if his product is popular and he is a good guy, there will be other developers that may help to convert data or code to the new conditions.

    On closed source, the developer himself should care to do this conversion. However, as we see, this is quite expensive in terms of resources and leads to the main bulk of the project going bloat and buggy. So, if you do care about innovation and stability do open source and keep the people coming to you.

  66. Re:The best time... by Anonymous Coward · · Score: 0

    Windows *98* outlived its mission in *97*?

  67. GNU's way by jsse · · Score: 1

    Symbol Versioning

    (This dummy line is added to get around a slashcode violation of postercomment compression filter - what the fuck is that?)

  68. Backward compatability with what? by Anonymous+Brave+Guy · · Score: 4, Insightful

    This is a confused discussion. A lot of people are mixing up "backward compatability for users" with "not making significant changes to the code base". The two are largely unrelated, except that screwing up the latter will also mess up the former.

    What your user sees is, and always must be, decided by your requirements spec, not programmer whim. The only people who can get away with doing otherwise are those developing for their own interest (hobbyists, people involved in open source development, etc).

    To put it bluntly, blanket statements like "meet 90% of your users' BC needs" are garbage. In many markets (notably the bespoke application development market) if you drop 10% of your users in the brown stuff, your contract is over, and your reputation may be damaged beyond repair. Look at MS; years later and in the face of much better libraries, MFC still survives, because people are still using it (including MS) and they daren't break it.

    This is far removed from rewriting things significantly as far as the code goes, which is where things like the standards mentioned come into things. I'm sorry, Cliff, but you don't do this "when you can get away with it" if you're any good.

    Every time you rewrite any major piece of code, "just to tidy things up", you run the risk of introducing bugs. You need to be pretty sure that your rewrite is

    • necessary to meet your requirements, or
    • fixing more than it breaks and not breaking anything unacceptable
    or, preferably, both.

    If the rewrite is justified using these objective criteria, then you do it. When you do, you try to minimise the number of changes you make, and to keep the overall design clean. You retest everything that might conceivably have been broken, and you look very carefully at anything that didn't work -- it's quite possible that the people who originally wrote this code months or years ago made assumptions they forgot to document and you've broken them. Finally, if and only if your rewrite is performing acceptably and all the tests are done, you decide to keep it. If not, you throw it away and start rewriting again.

    And for the record, yes, I spent most of last week rewriting a major section of our application, as a result of a code review with another team member. We kept the overall design, tweaked a few things within it, and rewrote most of the implementation. Now we need to retest it all, update all the docs, etc. This little exercise has cost our company thousands of pounds, but in this particular case it's justified by a needed performance increase and the significant reduction in bug count. But you can bet we thought very hard about it before we touched the keyboard.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  69. Bullshit by Anonymous Coward · · Score: 0
    "After a while your normally sensible and readable code becomes a nightmare spaghetti tangle of conditions, macros and multiple re-inventions of the wheel."

    If all you know how to do is "hack code" (as the Linux and OSS people like to say) and not design and program like a professional, then I guess the statement above is true. But for those of us who do know how to create first-class software backward compatibility is nothing more than a very minor challenge that's easily handled. I've been doing exactly this kind of programming work for 20 years, and the biggest problem I run into is untangling the horrible messes created by amateurs who are more interested in "getting it to work" than in making something robust, flexible, and easily maintained.

  70. not ALL programmers are fucking MORONS by Anonymous Coward · · Score: 0

    In a well modularized program, backwards compatibility is just another module in the architecture; it is not some anchor preventing forward progress like inexperienced slashdot posters would have you believe. Yes, there ARE in fact professionals out there making backward compatible software without breaking their backs doing it.

  71. Think of an intermediate release by MouseR · · Score: 2

    I work for a company where we have a multi-platform calendaring solution. Groupware type of thing. (And yes, we support Linux as well.)

    While the Windows team was preparing drafts for an upcomming version, in the Mac team, we were readying a Carbon-compliant version of our product for Mac OS X.

    The previous version was 5.1. This new, carbonized version didn't have any new features per say. A couple of bug fixes, and a new core API (Carbon). It was then numerated as 5.2. Basically, it's just a port of the 5.1 release, plus extra things to make it behave better under Mac OS X (AQUA stuff, and direct BSD networking instead of Open Transport).

    The new 5.2 release supports Mac OS 8.6 and beyong, including Mac OS X. Prior to that, the 5.1 release supported System 7.1.2 on up.

    The 5.2 release being a Mac OS X port (although it works under Mac OS 8.6 and up) meant that we could break away with System 7 without pissing too many users, since it didn't bring anything new in terms of functionality, since the 5.1 release.

    The 5.2 release, therefore, acts as a cushion between the 5.1 release and the upcoming 6.0 which will most likely drop Mac OS 8.x, while be usable w/ Mac OS 9.x (and Mac OS X).

    So far, this has worked OK for us.

  72. RPM hell by skajohan · · Score: 1
    I know very well what you're talking about. I've been there too. You really should consider trying out Debian. The install wasn't that sweet, but it's well worth the trouble. You'll never look back once you're typed apt-get install app and seen the magic. It just works. Just like it's supposed to be. I'm evangelizing, sure, but I'm sure you will be too quite soon ;)

    1. Re:RPM hell by suwain_2 · · Score: 1
      Hehe, actually...

      I ran Debian for a while, and apt-get was *REAL* sweet. But then I upgraded to 2.4 without really having any idea what I was doing (the version of Debian I was using was from pre-2.4 days, and didn't work well, unless you read their HOWTO, which I only found *after* I had upgraded everything.

      In short, I managed to break apt-get, and really needed a working Linux box, so I just overwrote it with RedHat... But I'm thinking of switching back; it was *real* nice until I totally killed it. (BTW: There's a Debian 'spin-off' distro that's supposed to be real easy to install, yet based on Debian, I think it's called "Progency" or something; I'm thinking I'll give that a try - as you say, the Debain install was awful.)

      --
      ________________________________________________
      suwain_2 :: quality slashdot p
  73. Design intent is a cornerstone by crath · · Score: 4, Insightful

    A key to providing backward compatibility is "design intent"; i.e., closely examine the backwards compatibility issue when you are first thinking about creating a piece of software. Internal data structures, external file formats, APIs, etc. are all influenced by the design constraints placed upon a project. If one of those constraints is backward compatibility then these structures will all be built differently than in the case where no backward compatibility is ever required.

    FrameMaker is a great example of an application that appears to have been architected from day one to provide backward compatibility: every version of FrameMaker imports and exports Maker Interchane Files (.MIF files) and so it is trivial to move files between releases of the application. While I'm sure this causes the developers some headaches from time to time, I know from personal experience that a constant anchor point like .MIF files influences coding decisions.

    Having done work on an ASCII interchange mechanism for a multiplatform application, I can be fairly certain that the FrameMaker decision isn't very difficult to implement: each release of the application has a pair of small functions, one to walk the internal data structure and emit the ASCII interchange format, and another that parses the ASCII interchange file and produces an internal data structure.

    When we designed our application, the ASCII interchange functionality was deemed important; this influenced the internal data structures, which in turn influenced the binary data files. If we had tried to bolt backward compatibility on at a later date (i.e., in version 2.0) it could have been a lot of work; whereas, building it in from day one didn't cause any extra work.

    Conscious design intent is the key to making backward compatibility a non-issue.

  74. Good article. by mindstrm · · Score: 2

    Finally.. something somewhat worthy of discussion.

    Along the same lines... what *really* irks me is when I go to compile some utility I used a couple years ago... and I it wants a *whole bunch* of libraries it didn't need before, usually related to display only.

    Too many good command-line apps get turned into huge, bloated GNOME apps for *no reason* (or just so the developer could play with gnome).

    You shouldn't let backwards compatability hold you back, that's for sure. If you wanna bring out version 2.0, as a rewrite, why not? Keep the old one available to people, though.

  75. I used the 3b meaning of irony ;) by Axe · · Score: 1

    ironic iron.ic /"I-'r@-nik also i-'r@-/, adjective [1576] 1) relating to, containing, or constituting irony 2) given to irony synonym see SARCASTIC -- iron.i.cal.ness /-ni-k&l-n&s/ noun (C) 1997 by Merriam-Webster, Incorporated

    iro.ny /'I-r&-nE also 'I(-&)r-nE/, noun [1502] (plural -nies)

    1) a pretense of ignorance and of willingness to learn from another assumed in order to make the other's false conceptions conspicuous by adroit questioning -- called also Socratic irony

    2) (a) the use of words to express something other than and especially the opposite of the literal meaning (b) a usually humorous or sardonic literary style or form characterized by irony (c) an ironic expression or utterance

    3) (a) (1) incongruity between the actual result of a sequence of events and the normal or expected result (2) an event or result marked by such incongruity (b) incongruity between a situation developed in a drama and the accompanying words or actions that is understood by the audience but not by the characters in the play -- called also dramatic irony, tragic irony

    synonym see WIT [Latin ironia, from Greek eirOnia, from eirOn dissembler]

    Meaning - I understsood the meaning of this - but not the person asking the question..

    --
    <^>_<(ô ô)>_<^>
  76. Java by gUmbi · · Score: 2, Interesting

    First, I'm not sure if we're talking about code compatibility or user compatibility but I'll talk about code compatibility (who cares about users anyhow? :).

    I've found that Java is a great lanaguage for making backwards compatibility easier. The main reason is that dynamic linking doesn't use cardinals or offsets. This means that I can fundamentally reprogram and entire class (even without using an interface) and still have a dependent program work fine with recompiling it. (Note: the only gotcha is finals, which are copied at compiliation to the dependent program - bah!).

    Along with a couple of other things, such as using lots of interfaces and factories throughout the library, backward compatibility is hardly an issue at the code level.

    Jason.

  77. I just realised.. by Axe · · Score: 2, Interesting

    ..I used my mouse to cut and paste copyrighted material. It is a circumvension device made by Microsoft. Can anybody say DMCA??

    --
    <^>_<(ô ô)>_<^>
    1. Re:I just realised.. by Axe · · Score: 1

      I also realized that I am here at work since yesterday, kissing backwards compatibility goodbye, and my girlfriend is going to kill me... Whole Foods should open at 8am - they got good deli... Is not it ironic? (just kidding).. ;)

      --
      <^>_<(ô ô)>_<^>
    2. Re:I just realised.. by Anonymous Coward · · Score: 0

      Isn't it "ironic" how many of Axe's posts in this story got modded up, despite a lack of intrinsic value. Might I suggest this little karma whore has a 2nd account he is using which currently has moderation points?
      Moderations, please, take another look at these posts and ask yourself if they are deserving of a "Funny" or "Interest" moderation -- and act accordingly.

  78. Answers. by mindstrm · · Score: 3, Insightful

    Your web server should support all versions of HTTP. (You meant HTML?)

    POP3 and IMAP4 are not 'new versions' of each other... neither is outdated. one is not a replacement for the other. Needs dictated solely by users.

    Your web site should require no more funcionality than needed ot operate the way you want it to. That's just good programming. Don't use cookies or javascript or java if you don't need to.

    You can stick to Unicode, because ISO-8859 maps into it properly.

  79. Isn't it obvious? by mindstrm · · Score: 2

    Who is your target audience/market? That's where you get your answer. Nobody can tell you what to write, especially if we don't know what it is.

  80. And Linux got it right the first time? by Anonymous Coward · · Score: 0

    I don't think so...Software is all the same.

    1. Re:And Linux got it right the first time? by spauldo · · Score: 2, Insightful

      Linux is a different story. Being as it's not one chunk of software like windows, and with most of the libraries being cross-platform, it makes it both a blessing and a curse for this.

      But all that aside, yes linux did get it right the first time, being that they went with POSIX. UNIX has been around long enough the general API's are pretty stable. There's been some bumps - glibc comes to mind, since libc5 didn't support internationalization to the extent required, and the a.out to ELF conversion, but these things happen to all software. The vast majority of software needs little to no change between linux versions.

      Sun's done a real good job with this from what I can tell, since the same app running on solaris 2.3 on a sun4m machine can be run on an E10000 with solaris 8 without a recompile (although changing it would certainly help performance in many cases). They've had to deal with a lot of things, like the conversion from 32bit to 64bit, and have handled it pretty well.

      Now as for software written for libraries like GTK and whatnot, well, you knew what you were getting into when you wrote it. If you want something whose API doesn't change, program for xlib or motif (thanks to lesstif and the free motif clause, just about everyone can run motif apps).

      Many of us who were linux users from way back don't neccessarily want a nice, stable platform that never changes, never pushes new ground. If that takes a bit of compatability breaking, then so be it - the old libraries are still there if you want to use them. I remember having both libc5 and glibc on the same system, and I remember when you could only get certain key apps for libc5 even after most people changed to glibc (netscape, for instance). We try to limit such changes to the major version numbers, and the standard UNIX way of handling this makes it no problem to have multiple major versions of the same library on the system. It's our answer to the dll hell problem, and it works rather well.

      --
      Those who can't do, teach. Those who can't teach either, do tech support.
  81. Re: I'm sorry, but Java isn't a panacea by Anonymous Coward · · Score: 1, Interesting

    I've never seen even a smallish-application sized piece of Java code that would run 100% on all, of what? three?, of Sun's supported platforms....there are always platform dependent bug fixing (albeit not nearly as much as with C++). But combine this fact with Java's general pokiness and memory-appetite, and I'm afraid I can't see it as tremendous improvement over the current situation with our multiple Unix branches -- and can you imagine running an OS coded as much as possible in Java?

    Maybe in time Java will work -- but I couldn't seriously consider Java for any major software project in it's present state. I'd rather see more effort put into a more unified and standardized Unix environment.

  82. There are better examples by Anonymous Coward · · Score: 2, Insightful
    Microsoft is the most notable supporter of backwards compatibility.


    Not really, IBM on the mainframes and Intel on the 80X86 are the biggest backward compatibility stories around (over 20 years for Intel over 30 for IBM I would guess).
  83. NEVER! by yellowstone · · Score: 1
    I can't tell you how incredibly useful it is that the 850Mhz Duron with 512Meg of RAM I'm using right now is still 8086 compatable.

    Why, without 16-bit mode and segmented memory, I'd..., uh -- never mind.

    --
    150 Opening BINARY mode data connection for slashdot.sig (129323052 bytes).
  84. MS' stance by Anonymous Coward · · Score: 0

    When Microsoft attempted to remain completely backwards compatible, the public flamed them (anyone remember the famous 640k quote? Can't run on 8086 by surpassing it.) Microsoft remained vastly backward compatible when it released Windows 95, permitting it to run nearly all Windows 3.1 and DOS programs without issues, but placing huge stability holes in the OS to do so (direct hardware access by a common application is a no-no.) Backwards compatibility is not wholly a bad thing, but it can leave us mired in a place we do not want to be, sacrificing vast amounts of functionality to do so, and taking decades to undo it (Microsoft announced over 10 years ago that it would eventually merge all product lines to NT, finally realized now.)

  85. C++ and porting by elflord · · Score: 2
    Asking for an ISO C++ compiler is asking for trouble, because such a thing does not exist. For example, how many compilers support export ? However, it's important to draw the line somewhere on features. Where you draw the line depends on how important it is to support broken compilers.

    There is a secondary issue, regarding work-arounds for small annoyances. Autoconf does a good job of taking care of this. For example, an autoconf macro in configure.in like this can be used to tell me whether I need to install an sstream header for old gcc versions, or if one is already installed. Sorry, had to snip it, because of the lame "lameness" filter.

    One can check other conditions and define macros, or automatically edit Makefiles based on outcomes of this and similar tests. GNOME and KDE packages ship with a good collection of autoconf macros. I have found these very useful.

    I test regularly on g++ versions 2.95 and up. Less frequently, I try to build against g++ 2.91xx. The compiler is portable, and using the same compiler makes life simpler. Even within this narrow framework, there are portability issues. For example, earlier gcc versions do not ship with the sstream header. The streams library is broken in early versions. For examploe, int is used instead of appropriate types. The best way to manage these subtle annoyances is to use autoconf. Libtool is also essential, for a different reason: the commands used to link vary wildly from platform to platform.

  86. Re: Pessimism as a design rule by d5w · · Score: 1
    Design flaws are less a product of programming methodology, and more a product of not completely knowing the problem. [...] Sometimes the lack of a working crystal ball can be a real nuisance.....
    For this purpose, I have a working crystal ball; it always says "Reply Hazy, Try Again." It's never wrong.

    You never know the full set of requirements and constraints for any nontrivial project; what does help is to assume that you've got it wrong. That implies:

    • Version information should be the first thing in any interface.
    • Persistent formats are part of your interface (where persistent means "outliving a single invocation of a single executable" not "intended to be exposed to the user").
    • Assume that every interface will be used. This implies that interfaces should made as few and as well-defined as you can get away with, for when you have to put in backward compatability layers.
    • You can't know what your users want, because they don't know it themselves. But make sure you know who they are, so you'll know what you're breaking when you have to break things.
    When the above is applied to developer interfaces, I'd also add:
    • You have to be cruel to be kind: when clients exceed your spec, die. Die hard; die fast; and leave a good-looking corpse (i.e., a clear error report.)
    This is all a pain in the neck. There are tools that make some of it easier; e.g., some of the OO frameworks people have mentioned elsewhere include versioning facilities, if you think to use them. None of the tools handle the general design problem, though, and some are actively damaging in that they attempt to be as permissive as possible to the user, regardless of what this does to future compatibility efforts. Remembering that you've almost certainly got it wrong and you're going to have to fix it later can make it a lot easier to do that fix. And the next one.
  87. A simple answer by KGBear · · Score: 1

    I've read some of what people had to say here, but it seems to me most people are missing the point.
    For me the only reason to break backwards compatibility is "when you absolutely have to".
    That usually means one of two things: there's something new I can't afford not to support (like the Linux kernel 2.4.x's new routing and firewalling goodies) or there's a new security bug fix that requires compatibility breaking.
    "because MS (or any other company or person) wants me to" or "because new is better" are not strong enough reasons.

  88. So, uh... by Doktor+Memory · · Score: 1

    ...what are the odds that the next version of CTOC will handle importing meeting requests sent from pure-Exchange sites to a CT/Exchange/CTOC site? And are we ever going to see an Entourage/Outlook-Mac version of the CTOC?

    (Sorry, couldn't help it...it was just a little too obvious who you work for. :)

    --

    News for Nerds. Stuff that Matters? Like hell.

    1. Re:So, uh... by MouseR · · Score: 2
      (Sorry, couldn't help it...it was just a little too obvious who you work for. :)

      What I do on /. is totally private and not work-related. Also, due to the OSS nature of /., I try not to blatantly publicize who I work for. It's not the place for that, unless the context requires it.

      I'm not sure I understand your first question. If you're talking about IMIP/ICAP support, we already support vCalendar and iCalendar, but lack automatic response-and-reply of attendance change from/to foreign calendaring systems, in the current 5.x versions of the server. Deduct what you want from the upcoming servers.

      Concerning your second question, though, I must take the company attitude. Which is, not to comment on unreleased products, wether they exist or not.

      Though, you can help answering yourself by these simple facts:

      • CTOC took nearly two years of development to get it where it's at.

        The Mac version of MS Outlook uses a totally new/fresh/independent code base than the original Windows versions.

        MS Outlook for Mac just came out (barely).

        MS Outlook for Mac is not carbonized yet, and we're concentrating Mac development efforts on the carbonized version of our CTime client and code base
        .
        On first sight (not that we have or have not looked into it), the mac version doesn't seem to split the communication layers out like the Windows version. Every component, like the calendaring one, is a single (huge) blob of code in it's own shared lib which doesn't seem to link with anything external.

      Given the above, you could deduct one of three possible scenarios: a) we're looking into it, b) work has begun or c) We've looked into it and work has not begun because it doesn't look feasible for the moment.

      Hope this helps. If you want to discuss this further, maybe we should do this via e-mail, since this is getting out of context, and don't want to loose any karma points to that (took be a while to get back up to 40 after a few bad postings of mine...)
    2. Re:So, uh... by Doktor+Memory · · Score: 1

      If you want to discuss this further, maybe we should do this via e-mail, since this is getting out of context

      Happy to. memory-ctoc@tunameltdown.com. (I'd write you, but you have no address available.)

      --

      News for Nerds. Stuff that Matters? Like hell.

  89. Arrogance by Veteran · · Score: 3, Redundant
    Much of 'throw out the old cruft' is simply arrogance on the part of new developers: "These guys didn't know what they were doing" implying of course that "we are much better than they were".

    Old code is hard to read - even if it is your code - because you lack the overall 'grasp' of what the code is doing - which the developer had had when it was written. Old code becomes just lines of code instead of part of an intelligent structure; you can see the 'trees' but the 'forest' has been lost.

    This means that the problem with old code is that YOU don't know what the developers were doing; not that THE DEVELOPERS didn't know what they were doing!

    It is a very easy mistake to confuse those two types of ignorance. Add in a little 'it can't be me that is wrong' attitude and the name of the game becomes a contemptuous 'out with the old in with the new.'

    The truth is that there are differences in skill levels of programmers - old code written by good programmers is a lot better than new code written by poorer quality programers. If you didn't know that programmers differ in skill level it is conclusive proof that you are not a good programmer; to a bad programmer all code looks the same - that is why a bad programmer is a bad programmer

    1. Re:Arrogance by Anonymous+Brave+Guy · · Score: 2
      This means that the problem with old code is that YOU don't know what the developers were doing; not that THE DEVELOPERS didn't know what they were doing!

      Of course, if the original developers document properly, this doesn't much happen. That will soon tell you whether the guys who did it first time around were good or not.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  90. 10mps? by Anonymous Coward · · Score: 0

    Wow! 10 miles per second? That's one fast model T!

  91. version 5 by josepha48 · · Score: 1
    In version 1 you are getting your new product out the door.

    In version 2 you are adding loads of features.

    In version 3 you have oodles of software features and bugs that you are fixing and this is usually the most unstable bersion.

    In version 4 you have stabalized version 3 and added more features, but the code is usually so bloated that it is difficult to maintain.

    So version 5 you do a total rewrite and screw backward compatability.

    ROTFLOL.. ok.. this is the mozilla model .. but I have seen this elsewhere too.

    Seriously the best time to throw away backward compatiblity is when you cannot support it. I.E. Hardward to support it is not longer made, like VAX. Or when the percentage of clients that use your software that need the support is so small, that it is more of a burden to support it.

    --

    Only 'flamers' flame!

  92. Sounds like library versions by spitzak · · Score: 2
    This sounds exactly like the library version numbers that have been on every shared library implementation ever made for Unix. I don't think this quite solves things for a few reasons from what I know has broken on Linux/Unix:

    1. The developer may think their change is not significant enough to warrent a new version. When they are wrong, you have the same problem as before. Trying to avoid this would result in thousands of versions, and is better solved by statically linking.

    2. The different versions still need to talk to underlying layers. Unless something like VMWare is used to run several copies of Windows at the same time, there is a layer where back compatability needs to be worked on. This could be solved by making a simple, well-defined lowest layer, but it is obvious that Windows (and anything in Unix designed after 1980) does not follow such design principles.

    One think MicroSoft may be addressing is the obscurity of the Linux library versioning. I have been writing software for this for 8 years and I still have no idea what figures out what version of a library to use, or how it works. It would seem that the filenames are all that are needed to control it, but apparently that is not how it works. Nor do I know how to find out what version of a library a program wants (ldd prints the version it will load, which is not exactly the same).

  93. MS and Apple do it right by ToasterTester · · Score: 1

    Backwards compatibility is a necessary evil, but at some point you have to say that it time to move on. In my past I worked for companies that made Mac and Windows products. Both Apple and MS would give plenty of warnings that things are changing and to start getting ready. And still many would ignore the warning and whine that their product don't work with the new OS version. Solaris really needs to realize that its growing too fat trying to be backwards compatible for too many versions back. I remember at one UG meeting for a product I worked on it was about 1994 and Pentium and Windows and NT were the typical setup. A couple guys going nuclear because we had finally dropped support for DOS and 8088 CPU's. They wouldn't understand they got a decade of support, it is time to move forward.

  94. Backwards compatibility by MadHungarian · · Score: 1

    Don't worry about it - nobody else does. Microsoft dosen't and they have been moderately successfull!. Today I took my 10-month old cell phone in for repair - the antenna broke off. They don't make that model anymore - so they gave me a newer (and better) phone. The one thing that should be done is to offer the user a painless upgrade path, automatically update any data or script files, give them simple "quick start" documents.

  95. Featuritis killed all the good coding by Anonymous Coward · · Score: 0

    Often, dumping of B.C. is a sure sign that a newbie is in charge. (How many tried and tested routines REALLY need to be dumped in favor of newer ones?) Or that the people selling the code are trying to jack more dollars out of their customers. (Computers create text and pictures. How many REALLY innovative ways are there to present them?)

    What's ridiculous is the amount of dollars and human effort expended in chasing the latest fashions.

    What's appalling is the number of people who publish new software and don't even include the system requirements of the software -- and usually it's the latest -- because they are so suckered into the idea that newest is best.

    REAL programmers burn to ROM. SMALL ROM. 'Cause the solution is so elegant and carefully tested. And the most outrageous claim of all: great code is optimized by human beings.

    There, you puppies.

  96. Somebody needs a nap by codefool · · Score: 1
    I have, many times and current projects included, performed CNR (Comode-and-Recode) on code - simply because as a project is coded, it is better understood and the developers understandibly want to do it better, smaller, and more elegant. This is a true engineering objective.

    In the case where code is inhereted by a maintenance group or a successor developer, then it is more laziness than arrogance that tends toward the preference of tossing out existing code, as it is at times easier to reinvent than it is to reverse-engineer.

    --
    "Stop whining!" - Arnold, as Mr. Kimble
  97. Sometimes stay off the cutting edge by vanzilar1 · · Score: 2, Informative

    Sometimes the answer is not to target the newest implementation but the one that is used on all platforms in use. For Java this means sometimes going back to the 1.0 API! You lose a lot
    of cool functions but it is the only way. Then just make sure it works best on the newest platforms or browsers depending if the program runs on an OS or a web browser. This isn't always an easy thing to find out. We made a web application using Java 1.1 and it turns out that Netscape on the Mac supported it without any of the changes from 1.0 to 1.1 so it didn't work there. But recently I've heard that Netscape may finally be supporting 1.1 for real on the mac and 1.3 with OS X. Cool!!! If only we wrote the program in Java 1.0 there would be no problems (except that it would probably be really clunky).

  98. LCD or How close to the metal do you run? by WyldOne · · Score: 1
    Compatable for what? Funtionality or code? Depending on the application there is a difference.

    If you are coding a app to run on specific hardware (vertical app or black box), the choices are pretty easy. Make it perform the same functions . If it means a rewrite because of new hardware or lack thereof, do it.

    If say, you want to be compatable with everybodys generic hardware, you can write specific compilers for them Example Sierra used a generic gaming system they wrote for most of the adventure games they made. It used its own language for describing the functions/graphics of the game. Provide a new game pak/art/music/etc, and viola - a new game. The game engine stayed the same (or very similar)

    If both the hardware and software used is generic (compilers etc.) then design for the LCD (Least Common Denominator). This make a app more horizontal but can be run on a wide varity of systems and created with a wide variety of tools. Example: I just wrote a small tool to move cache files for my UT games. I wrote it in AWK because it was simple, and can be run on Linux/Windows/Mac/BSD/etc. Furthermore; it is more or less generic (all of you know AWK right?)

    The one thing that breaks these rules is whiz-bang software. Eg UT Q3 Q4, cutting/bleeding edge technology. Mostly here you are trying to impress people or to make changes to something already, in hopes that it will be the next generation of generic tools/hardware. This is almost the first case (black box) because it will have lots of bugs, may be cranky as hell, and nasty to code.

    Don;t get me wrong, compatability is good, but you have to ask yourself - "Just who is this for?"

    --

    make Linux, not Microsoft. sin(beast) = -0.809016994374947424102293417182819
  99. The pinnacle of our civilization by Compact+Dick · · Score: 1
    It's like we should still support the first T-Ford, allowing cars who run at 10mps on our highways.

    Solid proof we have not progressed - bring back the model T, Ford!

  100. UNISYS overdoes it by Animats · · Score: 4, Interesting
    After being away from UNIVAC mainframes since 1978, I recently came across online manuals for the latest version of the operating system for the UNISYS ClearPath Server. That machine is running a version of OS2200, which is an updated version of OS1100, which is an updated version of Exec 8, which was first demoed in 1967.

    The API has barely changed in the last 25 years. A friend of mine has an application that's been running unchanged since the 1970s. It has contined to work across generations of hardware. And it's in assembler.

    They had the advantage that their OS was decades ahead of its time. UNIVAC had symmetrical multiprocessing with threads in a protected mode environment thirty years ago.. And threads were designed in, not bolted on like UNIX.

  101. Never by Anonymous Coward · · Score: 0

    Never ever ever.

    Embedded systems that have a defined FINITE range of functionality of course should only deal with what they can encounter.

    But you should NEVER break existing functionality.

    I believe Microsoft has a patent on that technique, anyhow.

  102. Do what the other OSS developers do... by Anonymous Coward · · Score: 0


    and don't bother with backward compatability. I can't count the number of times I've downloaded some nifty/cool software from freshmeat to find that nearly half of my system libraries need to be updated. That wouldn't be so bad if the OS release I was running were say - 6 months old. However that's not the case - SuSE/RH could have made the realease yesterday, and I'd still have the same problem!

    I think we need more backward compatability and less interdependencies - not the other way around.

  103. From what I've heard... by Lord+Custos · · Score: 1

    ...as a side effect of Win 9x relying heavily on DOS, some parts of its code assume you are running on a 4044 chip.

  104. bullshit. by Axe · · Score: 1

    I do not have a second account and my Karma is 8 now (after ~600 posts in several years). It will be 7 now: Fuck you, anonymous asshole.

    --
    <^>_<(ô ô)>_<^>
  105. Forward Compatibilty vs Backward Compatibility by SuperGrut · · Score: 1

    Usually in a discussion like this it is good to define the terms. Many of the times people say Backwards Compatibility when they mean forwards. Forward Compatibility - being able to run new apps on old boxes. Backward Compatibility- being able to run old code on new boxes.

    --
    The city is being overrun by a herd of Lucy Liu's.
  106. 2 Thoughts by 4of12 · · Score: 2

    1. You have to distinguish backward compatibility in the program or in the interface presented to the users. Sometimes, the latter can be preserved for the sake of the clients while the former can be invisibly improved to adhere to current standards.

    2. Cross platform portability is a good thing in its right. Not just be cause you can increase the market by a few percent, but because, in my experience, the more a code has been required to run throught the gauntlet of different compilers on different platforms, the more likely the code is not going to break. That means break, period, as well as not break when porting to platform n+1.

    Maintainability and extendability of software is improved markedly if you make an effort to be cross platform portable.

    That's not to say that you need to port back to the same least common denominator as Ghostscript has been known to do. While impressive, I consider that level of effort to be more than I would consider for a software project. But a lot of that is legacy anyway.

    I work a large C++ Solaris project that has code from the mid-1990's when compilers didn't have as much of the standard as they do now. We're slowly making an effort to move in the direction of standards in this regard because it will decrease long term maintenance costs and make the code base easier to read and, therefor, to extend.

    --
    "Provided by the management for your protection."