Slashdot Mirror


Why Do Projects Continue To Support Old Python Releases?

On Planet Python, Gregory Szorc asks why many projects continue to support Python releases prior to 2.7, when they are all EOLed (2.4 in 2008, 2.5 in 2011, and 2.6 last October), and Python 2.7 provides a clear upgrade path to Python 3. Quoting: "I think maintainers of Python projects should seriously consider dropping support for Python 2.6 and below. Are there really that many people on systems that don't have Python 2.7 easily available? Why are we Python developers inflicting so much pain on ourselves to support antiquated Python releases? As a data point, I successfully transitioned Firefox's build system from requiring Python 2.5+ to 2.7.3+ and it was relatively pain free." Shortly after posting, other developers responded with their reasons for using older Python releases. First, Rob Galanakis of CCP (EVE Online) explains the difficulties involved in upgrading a mature commercial project embedding Python. Nathan Froyd adds "I think this list of reasons to upgrade misses the larger point in providing software for other people: You do not get to tell your users what to do. ... Maybe those users don’t have sufficient control over their working environments to install a new version of Python. ... Maybe those users rely on certain APIs only available in older versions of Python and don’t wish to take an indeterminate amount of time to rewrite (retest, recertify, etc. etc.) their software. ... Maybe those users are just rationally lazy and don’t want to deal with downloading, configuring, and installing a new version of Python, plus dealing with inevitable fallout, when the old version has worked Just Fine for everything else."

432 comments

  1. OS versions by Anonymous Coward · · Score: 1

    Some versions of Python don't work on some OSes, mostly those with not-so-sane threading systems. Not that any of this matters, as the OS I can think of off the top of my head with such issues are Win9x OSes or other niche OSes that don't get as many updates as one would like.

    1. Re:OS versions by Penguinisto · · Score: 1

      Well, that and custom add-on code often blows up under 2.7 unless it's re-factored (or in some cases re-written), and nobody ever seems to want to do that...

      --
      Quo usque tandem abutere, Nimbus, patientia nostra?
    2. Re:OS versions by icebike · · Score: 4, Insightful

      Just look at the time line:

      (2.4 in 2008, 2.5 in 2011, and 2.6 last October),

      Stop obsoleting code on a 3 year cycle and you wouldn't have so many stragglers.
      Programming languages need stability and backward compatibility. You can't rebuild the world each time
      someone decides to issue a point release. Handle it in the compiler.

      --
      Sig Battery depleted. Reverting to safe mode.
    3. Re:OS versions by plopez · · Score: 3, Interesting

      Which is why COBOL will probably out live Python. Stability.

      --
      putting the 'B' in LGBTQ+
    4. Re:OS versions by S.O.B. · · Score: 3, Insightful

      Exactly. I'm pretty sure COBOL programs I wrote almost 30 years ago would still compile today. That code would be about the same age as the guy mentioned in the summary (5 years out of university btw) who is whining about supporting 3-5 year old code. Boo-hoo.

      I'm pretty sure when the world ends the only thing left will be cockroaches and they will be using COBOL.

      --
      Some of what I say is fact, some is conjecture, the rest I'm just blowing out my ass...you guess.
    5. Re:OS versions by EmperorOfCanada · · Score: 4, Insightful

      I love most things about python but there is something supremely arrogant about waving your hand and saying, sorry but we broke all your code. I hear all kinds of very well thought out arguments involving unicode and whatnot; but there are dozens of other languages that didn't break backward compatibility and have added all kinds of fundamentals such as ascii to unicode.

      I get this feeling that the core developers of Python have lost focus of what the typical developer wants. I see the same thing happening in C++ with templates. Templates aren't bad its just that the bulk of C++ developers are far more interested in the cool new iterating system in C++ than all the wonky template features that are added hourly. Luckily with C++ there has been no threats to break backward compatibility.

      It is almost like these people are trying to impress some old CS professor instead of making their customers more productive.

      But where the python people are playing with fire is that if a company has a massive codebase that is getting creaky and needs a huge Python porting effort that would probably be combined with a huge architecture refactor then that company might think, "we don't want to be forced to do this in the future, so what other language has been more version stable?" Or you might have a new IT head who has been pushing for his favorite language and will take advantage of this to switch. Python is awesome but there are other fish in the sea; and as we all know even good languages can fade (see PERL) and no so good languages take their place (PHP).

    6. Re:OS versions by satuon · · Score: 1

      What about FORTRAN code?

    7. Re:OS versions by Karzz1 · · Score: 1

      They mention having EOL'd 2.6 last October.. yet 2.6 is the system Python on RHEL/CentOS/Scientific 6 systems. I am not going to hose my system for the sake of what a Python dev wants.

      --
      Beware of he who would deny you access to information, for in his heart he dreams himself your master.
    8. Re:OS versions by plopez · · Score: 2

      That too, alive and kicking. BTW the last two versions, '08 and '03, are nice as the compilers give support for F77 while adding in OO and parallel programming functionality.

      --
      putting the 'B' in LGBTQ+
    9. Re:OS versions by xfizik · · Score: 1

      Stick to a particular version of Python and you will have the same stability.

    10. Re:OS versions by Anonymous Coward · · Score: 0

      I'd suggest COBOL 74.

    11. Re:OS versions by david_thornley · · Score: 1

      Template features are not added to the C++ standard hourly, but rather in 2011 and (it is hoped) 2014. Any features can be added to any individual implementation whenever the implementer wants, and of course people can publish snippets and code as they like, and these can be templates. Of course, all this is true of any other language, and I'm really wondering what point you're trying to make.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    12. Re:OS versions by EmperorOfCanada · · Score: 1

      My point is that it is mostly C++ insiders who are all hot for templates. I read in discussion forums and discussions with friends that they generally hate anything but the simplest of templates. Then I read about people switching to C because of the nightmare of exceptions and templates. But when I showed all my C++ friends the new for loop for iterators they just about lost their minds. To be even more specific many people that I know who program yards and yards of C++ don't even like streaming that much, but again for anything but the simplest of things.

      My personal view is that with templates that you can apply a common quote about regular expressions. "If you have a problem and you solve it with a regular expression; you now have two problems."

      My other point is that if the C++ crew keep pushing templates so hard (with say the inclusion of boost) that they will turn C++ into a perfect academic language that will sit right beside lisp in the rankings. But wisely they haven't broken backward compatibility which would be an instant death headshot.

      A good example of bad template use is that I (someone with 15 years C++ and many many commercial products) watched a Youtube video and was unable to understand almost anything the guy had typed. An example of useful new C++: std::string s = std::to_string(42);
      An example of bad templated C++ is:
      (define-syntax (while stx) (syntax-case stx () [(_ test body) (letrec ((loop (lambda () (if test (begin body (loop)))))) (loop))] [else (raise-syntax-error 'while "Illegal syntax in while loop" stx)])) Oh wait a second that isn't C++ that is Lisp; which is what C++ is beginning to look like.

    13. Re:OS versions by macsuibhne · · Score: 1

      It's even worse on CentOS 5.9; the default Python there is 2.4, and you can't change the system version or you'll break Yum.

      --
      -- "Quis custodiet ipsos custodes?" -- Juvenal
    14. Re:OS versions by Anonymous Coward · · Score: 0

      Why not keep the system version and install what your app needs into /opt?

      Or is that too challenging for you nitwits?

      Having multiple versions of a language running on a single system is not a serious problem.

  2. People don't upgrade by Ksevio · · Score: 2

    There are lots of people that have installed python (or had it installed), but not as many that are willing to upgrade their python installation to the latest version. The jump to python 3.0 is a little tricky because some code is not compatible (which is why we still have 2.x) so there's lots of software that would break if people upgrade.

    When developing, it's important to aim for the lowest support level. If all my customers are running offline RHEL 4, I'm stuck with python 2.3.

    1. Re:People don't upgrade by Anonymous Coward · · Score: 5, Insightful

      There are lots of people that have installed python (or had it installed), but not as many that are willing to upgrade their python installation to the latest version. The jump to python 3.0 is a little tricky because some code is not compatible (which is why we still have 2.x) so there's lots of software that would break if people upgrade.

      This.

      My job, like most jobs, isn't to code in Python. It's to process data, and Python (be it 2.4, 2.7, or 3.0) just happens to be one of many tools that I use to process said data.

      The fact that some developer might have built what he believes to be a better version of a Python interpreter than the one that ran my code is immaterial. I've got better things to do with my time than rewrite, re-test, and recertify known-good code.

      If changing the first line of my script to #!/usr/local/bin/pythoninterpreterforbusinesscriticalstuff isn't elegant enough for your tastes, that's the Python devs' problem, not mine.

      (If you think I'm annoying to Python devs, wait'll you see the grudge I have for Javashit frameworks and webdevs, who seem fixated on the concept that using HTML5 and Javashit is somehow more important than cross-browser compatibility, and that "cross-browser compatibility" means "all browsers will render it this week, and this week only, because the standard itself is a moving target! Who would want to display static HTML on a browser more than a week old?")

    2. Re:People don't upgrade by Anonymous Coward · · Score: 1

      I would say that some people can't upgrade, even if they wanted to.

      I have access to two computing clusters, and both are extremely outdated (linux 2.4 and 2.6). On the second one, I reached a point, were I can't update some software, because that would require to update some essential parts of the system, but this is not possible without risking the stability of the machine.

      In the case of python, I don't have this problem, yet. But who knows, what dependencies will show up in the future...

    3. Re:People don't upgrade by Trepidity · · Score: 3

      The jump to python 3.0 is a little tricky because some code is not compatible (which is why we still have 2.x) so there's lots of software that would break if people upgrade.

      That much is true, but I read this post as just calling for support for pre-2.7 Python to be dropped, not all of 2.x. Upgrading to 2.7 doesn't introduce the kind of incompatibility that upgrading to 3.0 does.

    4. Re:People don't upgrade by Anonymous Coward · · Score: 0

      HTML5 isn't a standard. Yes, I know they keep calling it as such, but the very point of a standard is that it doesn't move. It may get new versions, but the single version is cast in stone. If it is a moving target, it is no standard, period.

    5. Re:People don't upgrade by Bert64 · · Score: 1

      You can build local copies of virtually everything, including the libc, into your own prefix so it won't affect anyone else (./configure --prefix=/home/user/blah etc)... The only thing you can't upgrade is the kernel.
      Not that you should have to do this, as its very painful to maintain but it is at least possible.

      Most userland apps should run just fine, even on the 2.4.x kernel providing you compile an appropriate set of libs for them.

      On the other hand, what are you doing with a compute cluster running such old software? Old software is unlikely to properly support modern processors, suggesting you have a cluster of old processors... Compute clusters tend not to last all that long before they get dismantled, as its not economical in terms of performance/watt to keep a cluster of old hardware running.

      --
      http://spamdecoy.net - free throwaway anonymous email - avoid spam!
    6. Re:People don't upgrade by Darinbob · · Score: 3, Interesting

      The whole question of why users don't upgrade seems to be to be about making the developer's lives easier as opposed to the customers lives. But for my entire career I've had to support older releases I'd rather forget about, and it was taken as a normal and expected part of being a professional. It has only been relatively recent that developers start feeling peeved and annoyed at customers.

      However if you make it easier for customers to upgrade, maintaining perfect backwards compatibility, the problem can go away. For security issues, then back-port the fixes to older releases. You're selling a product, probably selling product support, so start offering the customers some service.

      Now I can understand with Python being an open source project that the devs who aren't getting paid just want to program for fun. That's the trap of adopting someone's pet project for production uses. But there are professional organizations who will offer paid support for open source projects.

    7. Re:People don't upgrade by RabidReindeer · · Score: 4, Interesting

      There are lots of people that have installed python (or had it installed), but not as many that are willing to upgrade their python installation to the latest version. The jump to python 3.0 is a little tricky because some code is not compatible (which is why we still have 2.x) so there's lots of software that would break if people upgrade.

      This.

      My job, like most jobs, isn't to code in Python. It's to process data, and Python (be it 2.4, 2.7, or 3.0) just happens to be one of many tools that I use to process said data.

      The fact that some developer might have built what he believes to be a better version of a Python interpreter than the one that ran my code is immaterial. I've got better things to do with my time than rewrite, re-test, and recertify known-good code.

      If changing the first line of my script to #!/usr/local/bin/pythoninterpreterforbusinesscriticalstuff isn't elegant enough for your tastes, that's the Python devs' problem, not mine.

      (If you think I'm annoying to Python devs, wait'll you see the grudge I have for Javashit frameworks and webdevs, who seem fixated on the concept that using HTML5 and Javashit is somehow more important than cross-browser compatibility, and that "cross-browser compatibility" means "all browsers will render it this week, and this week only, because the standard itself is a moving target! Who would want to display static HTML on a browser more than a week old?")

      You should be working in Java. Or COBOL.

      Most languages mutate enough that yes, keeping ahead of the bit rot is indeed as much the developer's job as coding it in the first place. The only exceptions are systems designed with the mainframe mindset that you code it and forget it for 3-4 decades. COBOL, because no one could really stand to muck with it, and Java because Sun put in deprecation mechanisms so that even really nasty old stuff will still be maintainable in an emergency.

    8. Re:People don't upgrade by Anonymous Coward · · Score: 0

      The fact that some developer might have built what he believes to be a better version of a Python interpreter than the one that ran my code is immaterial. I've got better things to do with my time than rewrite, re-test, and recertify known-good code.

      That. Time=money ($$), and if it works (and works reliably) then most businesses aren't going to be gung-ho to spend money they don't have to, to upgrade something that is working just fine. They might think about it when the hardware is unsupported and they need to buy a new machine, so maybe if they *have* to spend money now they'll go for "the whole deal" - but maybe not (while it would be my recommendation in such a circumstance, money is always the bottom line for any company).

    9. Re:People don't upgrade by Anonymous Coward · · Score: 0

      The fact that some developer might have built what he believes to be a better version of a Python interpreter than the one that ran my code is immaterial. I've got better things to do with my time than rewrite, re-test, and recertify known-good code.

      That. Time=money ($$), and if it works (and works reliably) then most businesses aren't going to be gung-ho to spend money they don't have to, to upgrade something that is working just fine. They might think about it when the hardware is unsupported and they need to buy a new machine, so maybe if they *have* to spend money now they'll go for "the whole deal" - but maybe not (while it would be my recommendation in such a circumstance, money is always the bottom line for any company).

      I've seen companies buy replacement hardware and stock it on a shelf so they have parts in case the 15-year-old unsupported system has a hardware failure. I've seen companies install Windows 3.1 boxes on frankenstien boxen just to get an old scanner to work (in 2007!). I've seen companies refuse to buy new machines because a required interface has been removed (hello serial ports). Hell, where I'm at now, there's two machines on some people's desks so that we can use an old modem in one of them to read a timeclock that's in the next room.

      People do stupid things for as long as they can to keep from introducing any kind of change, because change=RISK=spending money=bad.

    10. Re:People don't upgrade by fyngyrz · · Score: 4, Insightful

      Upgrading to 2.7 doesn't introduce the kind of incompatibility that upgrading to 3.0 does.

      No, but it still introduces significant incompatibility -- things can and will break -- and so re-testing, re-coding, re-certifying... still required. Now, you have two choices:

      a) Don't screw with the system, and everything continues to work just fine, no extra costs or problems are encountered, and everyone is happy except the cluetard who write TFA, who no one cares about anyway. Or:

      b) You can upgrade, break everything, incur lots of costs, and everyone in every direction is pissed off except said cluetard.

      Now, I ask you: what's obviously the best choice here?

      --
      I've fallen off your lawn, and I can't get up.
    11. Re:People don't upgrade by smash · · Score: 4, Insightful

      The only exceptions are systems designed with the mainframe mindset that you code it and forget it for 3-4 decades

      You just described any serious application used in production in a real business, who's core industry is not "software development". Fucking around re-writing stuff costs money. Re-testing everything costs money. Fixing bugs costs money. Unless there's a REALLY good, real world fucking reason to be spending said money that will directly impact the business in question it is wasted money.

      This is exactly the sort of thing many open source people don't seem to get: even if your software/development tools are FREE, pulling major compatibility-breaking changes costs real world people real world money. THIS is why Windows is so popular in the real world.

      We know the security is inferior. We know the stability is often questionable. We know it costs money in purchase and/or ongoing licensing fees. BUT: you pretty much get a guarantee that any code written today will continue to run for at least 10 years (due to specific OS version support for that long) and likely a lot longer than that; due to API support normally extending even further. Re-writing shit just because the platform changed costs real world time and money.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    12. Re:People don't upgrade by smash · · Score: 2

      Its not about making developer's lives easier. It is about not pissing money into the wind merely to maintain the status-quo. You think developer time is free? Even if it is un-paid, developer time wasted on re-writing working code is time that could be spent writing code to solve new problems instead. I.e., there is an opportunity cost.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    13. Re:People don't upgrade by akozakie · · Score: 1

      Why limit this to products? Write some short scripts to automate your tasks, carry them across upgrades, new computers, etc. If an upgrade messes them up, what will you do? Spend the time to fix them? And if it happens again? Do it again?

      Fix them as many times as you like. Me... Well, unless:
      1. the fix is as simple as adding some option, command, whatever specifying that the code uses syntax/API/whatever from version X,
      2. this will fix it permanently,
      I'm more likely to just rewrite them in a more stable language.

    14. Re:People don't upgrade by Darinbob · · Score: 2

      Part of this means the developer should not be making changes that break existing code. At the very least save this for major version changes. This isn't about pissing money into the wind, but giving customer value for the money they already spent. Ie, python 2.7 should not break python 2.3 code, there's no reason for that to occur.

      If customers figure out that older versions aren't supported and are left to rot away while devs work on the cool new stuff, then the customers will find other vendors to deal with instead and the word will get around to prospective new customers to avoid the product.

    15. Re:People don't upgrade by kefalonia · · Score: 1

      But, why aim for the least, when you *can* do the most? Environment-modules allow you to install multiple versions of software side-by-side, including multiple versions of Python. Furthermore, it is next to trivial to install few 2.x and 3.x versions by using EasyBuild, see for examples at: https://github.com/hpcugent/easybuild-easyconfigs/tree/master/easybuild/easyconfigs/p/Python EasyBuild itself is written in Python and will run in any Python 2.x for x>=4. Last but not least, EasyBuild may prove to be the more sane way to install Python packages in a cross-platform way; anyone here having a better *cross-platform* offer?

    16. Re:People don't upgrade by mrchaotica · · Score: 2

      Most languages mutate enough...

      What do you mean, "most?" All the other commonly used languages -- C, C++, the various .NET languages, Java, etc. -- most certainly do not mutate like that! New versions come out, sure, but they're not so broken in design that programs written in different versions have trouble coexisting on the same system!

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    17. Re:People don't upgrade by wolrahnaes · · Score: 1

      This is the sort of thinking that leads to me still finding IE6 in active use. If you don't already understand why that's a problem I truly hope I get contracted to replace you when your technical debt catches up to you.

      --
      I used to get high on life, but I developed a tolerance. Now I need something stronger.
    18. Re:People don't upgrade by Oligonicella · · Score: 1

      Its not about making developer's lives easier.

      Of course it is. They want to "improve" their product and don't want to create/maintain backwards compatibility. That is by definition their making their lives easier. It's about not pissing away their time? I'm concerned about their pissed off time why? I'm no more concerned about their lost time then the are about mine.

      If my app is working, I don't want it to break. That's me making my life easier. If the devs force a change and it breaks my app, I will reinstall the prior version and seriously look into alternatives. It's sometimes about as easy to convert.

      If a dev wants to continually modify their language and compiler I certainly hope they will enjoy using it. I will not.

    19. Re:People don't upgrade by EmperorOfCanada · · Score: 1

      Some code is not compatible? A huge number of Hello World level examples aren't compatible. That must be really off-putting to new developers starting out with Python when this tiny clip of intro code won't run. I would absolutely bet that the new programmer will think it their fault and not some version issue.

    20. Re:People don't upgrade by Anonymous Coward · · Score: 1

      This is the sort of thinking that leads to me still finding IE6 in active use. If you don't already understand why that's a problem I truly hope I get contracted to replace you when your technical debt catches up to you.

      Yours is the sort of thinking that leads to people using Pointcast. No, I mean, the BLINK tag. Wait, Javascript that makes the status bar (remember status bars? I remember status bars!) scroll horizontally. I mean, ActiveX plug-ins. I mean, Flash. No, wait, Silverlight. No, Adobe Air. No, it's all Vista Desktop Gadgets/Widgets, No, it's HTML5. Every year there's a HOT NEW IDEA for which every app needs to be retooled, and 90% of that development effort is utterly wasted and would have been done better either using standard HTML/CSS or native apps.

    21. Re:People don't upgrade by Anonymous Coward · · Score: 0

      More or less the core problem is that there is no need for pointless upgrades, and if the developers of the language runtime wanted those features in the runtime, they would have put them in there in the first place.

      PHP and Perl's core-feature-rot has the same problem.

      This is why no games should EVER be written using the scripting language. If they don't outright demand the version of the interpreter they were written with, then the game will not work, even if it's a minor point release.

      There's a horrible example I want to use that isn't about interpreted languages, but rather using old libraries with bugs in them.

      The game I'm referencing uses old versions of zlib, libpng, freetype2, jpeg6, and badicapture , all but one of these are "free", with the latter one being a licensed library. The game continues to use versions of the library from 2003 because none of the libraries can be updated to the "latest version" without breaking support dependencies.

      Ultimately we're going to have to move to all static compiled, forgoing all shared libraries because shared libraries can not be relied on to not break ABI's, and environments like MacOS X,FreeBSD and Linux don't mandate non-breaking of ABI's in binaries and still allow breaking API's when compiled from source. Windows has a similar but not entirely worse problem, caused by the SxS installation of libraries. Where the Unix-likes may only have one version of the shared library , Windows bulks up by having every version of the shared library that installed programs might use.

      If you want to see something deprecated, it has to be depreciated with good reason. The only good reason is "better security and lower resource usage" at the same time. Increasing security without improving performance is a bad tradeoff (see the many _s functions in C) and changing the API just make it more like Java or C++ just makes people want to ditch the language because it's too slow and complicated (see Perl, PHP and Javascript.)

    22. Re:People don't upgrade by Anonymous Coward · · Score: 0

      The actual problem is that when the paradigm changes, the language, the machine should be smart enough to move ahead the old code automatically. The day of moving from c to C++ to whatever suits your needs of the day as a programmer are numbered. Sadly, most programmers don't get that the code is to service real-life situations and needs, not a better way to do it, unless the code moving forward is not only backward compatible, but rather forward tracking the old code. AI will replace most static programmers soon enough. Grr...

    23. Re:People don't upgrade by Anonymous Coward · · Score: 0

      >You should be working in Java. Or COBOL.

      Java changes a lot. I wouldn't recommend it.

    24. Re:People don't upgrade by hweimer · · Score: 1

      We know the security is inferior. We know the stability is often questionable. We know it costs money in purchase and/or ongoing licensing fees. BUT: you pretty much get a guarantee that any code written today will continue to run for at least 10 years (due to specific OS version support for that long) and likely a lot longer than that; due to API support normally extending even further. Re-writing shit just because the platform changed costs real world time and money.

      Red Hat offers support for their distribution for up to 13 years. If you want, you can still get support for Python 2.2, which was released in 2001.

      --
      OS Reviews: Free and Open Source Software
    25. Re:People don't upgrade by Anonymous Coward · · Score: 0

      C++ did, not that long ago.

      Though that's a compiled language, so replace "coexisting" with "be compiled on". Once it's compiled, as long as you have the correct shared libraries, it keeps running no matter what you do to the compiler.

    26. Re:People don't upgrade by MerlinTheGreen · · Score: 1

      Agree on the professional organizations...

      All this rage at the python devs because someone forgot to buy a RHEL (or some other companies) subscription in order to keep security fixes rolling into legacy versions of python.

      There *is* an eco-system to support long term business critical use of tools such as python. You just don't go and buy it from python.org .

    27. Re:People don't upgrade by Anonymous Coward · · Score: 1

      Most languages mutate enough that yes, keeping ahead of the bit rot is indeed as much the developer's job as coding it in the first place.

      What is this list of languages that you use??? Holy hell, pick C/C++, Fortran, Lisp, ... are there new features that get added? Yes. Do the best practices change over time? Yes. Does the language have so many changes to make old code stop working? Dear God, no! We'd never get anything done then.

    28. Re:People don't upgrade by smash · · Score: 1

      So they're still supporting Kernel 2.2 as well then, yeah?

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    29. Re:People don't upgrade by smash · · Score: 1

      No. It's about the company that pays them not wanting to pay for development time/resources to track new versions of whatever. Easier/harder doesn't come into it, it is a simple case of X hrs of developer time at $Y/hr required - No, we do not want to spend.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    30. Re:People don't upgrade by Anonymous Coward · · Score: 1

      C++ didn't do anything: various C++ compiler vendors simply agreed to use a common ABI rather than all implementing their own. Even then this wasn't a problem on platforms that already defined their own ABI (Windows, for example).

      As far as C++ the language was concerned nothing happened. The ABI is a platform specific implementation detail.

    31. Re:People don't upgrade by RabidReindeer · · Score: 1

      Most languages mutate enough...

      What do you mean, "most?" All the other commonly used languages -- C, C++, the various .NET languages, Java, etc. -- most certainly do not mutate like that! New versions come out, sure, but they're not so broken in design that programs written in different versions have trouble coexisting on the same system!

      I take it that you've never been called in at 2 AM to fix a Microsoft C app that had been developed on an earlier version and required re-installing an antique version of the development system just to do a 1-line code fix.

    32. Re:People don't upgrade by hankwang · · Score: 1

      All the other commonly used languages -- C, C++, the various .NET languages, Java, etc. -- most certainly do not mutate like that!

      Usually if I dig up a C++ program (usually number-crunching using only standard libraries), that I wrote a few years ago (anywhere between 1996 and now), written for g++, it won't compile. Maybe the C++ syntax didn't change, but the handling of complex numbers did (more than once, I think) and various stuff has been moved out of the global namespace.

    33. Re:People don't upgrade by Anonymous Coward · · Score: 0

      As your customer, If it just works for my business in the shape it is now why should have to spend heavily on staff retraining , bug fixing etc just because you ant the latest shinny toys?

    34. Re:People don't upgrade by Anonymous Coward · · Score: 0

      Python IS actually the new COBOL. At least compared to modern languages like Rust or Nimrod.

    35. Re:People don't upgrade by mrchaotica · · Score: 2

      Requiring the developer to install the correct old version of the compiler toolchain in order to make a change is much more reasonable than requiring every user to install an old version of a runtime environment, especially when said runtime environment doesn't like coexisting with other versions of itself.

      Plus, Microsoft sucks. Compiling a C89 program in GCC is only a command-line switch away...

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    36. Re:People don't upgrade by satuon · · Score: 1

      > Microsoft C

      Is that the DOS Microsoft C (not Visual C++)? From what version to what version was the migration?

    37. Re:People don't upgrade by Anonymous Coward · · Score: 0

      Software projects that consider it a prize to "maintain backwards compatibility" help close the gap between developers' needs and users' needs. It also preserves usefulness, the project just keeps on getting more useful and powerful.
      When shiny new features are added to such projects, the designs tend to be more thought out since that new feature will have to be supported "forever". You won't see un-versioned protocols or file formats in such projects, for example.

    38. Re:People don't upgrade by RabidReindeer · · Score: 1

      > Microsoft C

      Is that the DOS Microsoft C (not Visual C++)? From what version to what version was the migration?

      It happened several times in the mid-to-late 1990s. For a while I was using make to do builds. Command-line tools are less volatile. Then they diddled with the IDE and make stopped working for me. I'm not sure that the rot ever backed up to the point where I needed to install an obsolete version of Windows to install an obsolete IDE so that I could make a change on code that wasn't even Windows-dependent (much less runtime dependent), but it certainly came close enough. Between that and the database-interface-of-the-week stuff that they were doing back then (the other extreme of "it if ain't broke"), it was just too much.

      Most of what I did was computationally-intensive code deployed on a few machines under my direct control and could care less about what runtime libraries it ran with. Since my work typically includes a system install package, a new version of the runtimes wouldn't have been an issue anyway. But thanks to the way they mucked around with the compiler, even changing a plus to a minus on a single computation could result in a major adventure just to get the altered code to compile and build. All while people were screaming and panicking.

      It is largely as a result of this sort of chaos that I abandoned MS and switched to Java. And have a firm policy that all projects be buildable on a non-gui box using Maven or Ant. Life is a lot more placid now. Plus my apps aren't tied exclusively to Windows. Or any particular brand or version of IDE, for that matter.

    39. Re:People don't upgrade by JackieBrown · · Score: 1

      I've seen companies buy replacement hardware and stock it on a shelf so they have parts in case the 15-year-old unsupported system has a hardware failure. I've seen companies install Windows 3.1 boxes on frankenstien boxen just to get an old scanner to work (in 2007!). I've seen companies refuse to buy new machines because a required interface has been removed (hello serial ports).

      But have you ever seen an elephant fly?

    40. Re:People don't upgrade by Anonymous Coward · · Score: 0

      Working at a big bank with mainframes and lots of programs from the 80s (and older) I have to fight this mentality all the time.

      Any vendor of "enterprise" software charges 20% "maintenance" or more. For a good reason: you have to keep software alive, have an active owner of an application that is constantly able to react to new functional or non-functional requirements.

      Software that "just works" for years may have major problems when changes are necessary after years of inactivity.
      You have to have regression tests, so you can be confident and dare to make changes to prevent getting too far behind.

      Of course it is good to use a programming environment that is stable, such as java (or cobol or pl/1), without unnecessary changes. But do not forget your code for even one decade, you'll never get away with that.

    41. Re:People don't upgrade by smash · · Score: 1

      IN the real world, a lot of the code that gets written is not by developers, but by others to cater to a niche requirement. That becomes entrenched.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    42. Re:People don't upgrade by rve · · Score: 1

      You should be working in Java. Or COBOL.

      Most languages mutate enough that yes, keeping ahead of the bit rot is indeed as much the developer's job as coding it in the first place. The only exceptions are systems designed with the mainframe mindset that you code it and forget it for 3-4 decades. COBOL, because no one could really stand to muck with it, and Java because Sun put in deprecation mechanisms so that even really nasty old stuff will still be maintainable in an emergency.

      Code and forget for 3-4 decades? No, 30 year old mainframes are no longer of any use to anyone, and code than hasn't been touched in 30 years probably won't work anymore. The idea that there are still dinosaur mainframes and cobol code from the 70s chugging along somewhere is a complete myth. IBM still regularly releases new models of mainframes, and old ones are deprecated. You regularly get new releases of OS/360 or whatever it is called this decade, and if you're too many releases behind, you lose support. Cobol applications are still being maintained, developed, and upgraded regularly, and new projects are still made in cobol. You may not like it, and it may make you a little sick, perhaps like the idea that your parents are still having sex, but that's the way it is.

      I can also tell you from experience that any non trivial Java code not touched since the 90's probably won't work today.

    43. Re:People don't upgrade by fyngyrz · · Score: 1

      This is the sort of thinking that leads to me still finding IE6 in active use.

      Lol. No, it isn't.

      IE6 is in use because it depends on incompatible technologies that (most ill-advisedly) must run in the remote client's space. Python, when running as CGI, runs where it should: In the server's space.

      IE6 thinking is what led to the incredible Java mess, though. So you're kind of on the right path, but you have to learn how directly polluting the client space differs from making choices within the server space. Here it is: CGI runs on anyone's anything regardless of version. It's a server side tech, and the client does not need to know or care how you got your computing done. Client side tech requires FAR more of the user's platform, and, as you observed, in the case of IE6, can even require a specific platform. I can't even tell you how often I've run into "wrong Java version" or some variant of that. Server side, you don't need to know what language, and I don't care if you're on an old palm pilot or the latest OSX hotness or some mid 2000's version of linux. Because in NO way does hanging with a particular CGI language commit the client to anything. You want to upgrade, go ahead, no harm done. Clear now?

      And of course, if Python had been properly written to be backwards compatible, as it should have been, you could just use the latest version no matter what. But, since they broke this and that moving forward, you have to be a little more careful and keep the right environment around. It's not horrible, but it's bad enough that you can't just do it as a matter of course.

      --
      I've fallen off your lawn, and I can't get up.
    44. Re:People don't upgrade by DutchUncle · · Score: 1

      I would mod parent up 5 points if I could. In the real world, you don't "deprecate" something that many of your users rely on - or, rather, you may call it nasty names, but you don't suddenly remove it and leave people non-functional with little warning. Yes, it's not the latest hottest coolest trendiest routine/library/language, but it WORKS. People keep posting "PROJECT is dead/dying because there's not as much activity"; how about thinking about it as "PROJECT is finally stable and reliable and doesn't need to be f'ing *fixed* every week."

    45. Re:People don't upgrade by DutchUncle · · Score: 1

      Compute clusters tend not to last all that long before they get dismantled, as its not economical in terms of performance/watt to keep a cluster of old hardware running.

      Replacement on PCs where I work is 5 years *minimum*. I happen to be running on an 8-year-old PC right now (with an upgraded hard drive). Come out to the real business world, and see how real companies manage their money.

    46. Re:People don't upgrade by Anonymous Coward · · Score: 0

      Standards are moving targets until they are finalized and approved.

      It happens to every non-trivial standard. When the HTML 5 spec is complete and voted on it will freeze.

  3. Wrong question by sjames · · Score: 5, Insightful

    Let's say I have something in python that was developed on python 2.5 and is in maintenance now. The correct question is why would I demand python 2.7 suddenly? Wouldn't that be kinda bone headed of me?

    Why should I do extra work with the express purpose of making my software more demanding in it's requirements?

    1. Re:Wrong question by Anonymous Coward · · Score: 1

      To add to the parent: I think it's completely wrongminded to expect people to "upgrade" to a new version of a language. (Java, I'm looking at you, goddammit.)

      It's fine if you want to patch the runtime library and give the patch a version number after the 2nd decimal point, but don't ever expect people to "upgrade" to a new set of features just for the hell of it. Often the guy who wrote it is gone, and the people who depend on the tools cannot be bothered to even attempt to understand the problems that might be caused by a new version of the language / parser / interpreter.

      tl;dr: If it aint' broke, don't fix it.

    2. Re:Wrong question by msauve · · Score: 3, Insightful

      The author, Gregory Szorc, seems confused about what "support" means. What he appears to be complaining about is "Why do projects continue to require old Python releases?" (e.g. he says "I successfully transitioned Firefox's build system from requiring Python 2.5+ to 2.7.3+)

      What does he care if they support older releases, which in no way implies that they won't also work with newer releases. It's the maintainers of those projects who do the work, not him.

      --
      "National Security is the chief cause of national insecurity." - Celine's First Law
    3. Re:Wrong question by bobbied · · Score: 2

      tl;dr: If it aint' broke, don't fix it.

      To that I would add, if it works, don't break it!

      The problem here is that 3.0 is not exactly friendly to 2.x scripts. I'm not going to argue the virtues of 2.4 verses 3.0, but I am going to say that if you break something when you upgrade your interpreter, expect to support the previous version for a LONG time.

      --
      "File to fit, pound to insert, paint to match" - Aircraft Maintenance 101
    4. Re:Wrong question by sjames · · Score: 1

      Exactly. I have yet to find a case where 2.7 won't run code written for 2.5.

      There is a better case (over time) for adding 3.x compatibility so the 2.x line can eventually retire, but considering there are still new systems coming with 2.6, I suspect 2.7 will be with us for a while. Then again, it is mature and highly functional so I'm not so worried about that.

    5. Re:Wrong question by RabidReindeer · · Score: 2

      I wish people in IT would stop saying "If it ain't broke". That's almost as bad as "All You Have To Do Is..."

      Computer systems don't decay in the literal sense. So in theory, once done, done forever.

      Reality, however, is different. Virtually no system is so isolated that some external hardware, OS, language or other upgrade cannot break otherwise healthy unchanged software.

      It will break. And according to Murphy, it's going to break at a time when the inconvenience, expense, and damage to your professional reputation can be maximized.

      Don't wait for it to break.

    6. Re:Wrong question by Anonymous Coward · · Score: 0

      One thing I would like to add is that eventually (could be a decade?) it will be unusable for some reason and you have to jump several versions to update. These 'jumps' tend to be more painful than staying current. Not picking on python- this is for anything.

    7. Re:Wrong question by Anonymous Coward · · Score: 0

      Let's say I have something in ActiveX that was developed in IE6 and is in maintenance now. The correct question is why would I demand IE8 suddenly? Wouldn't that be kinda bone headed of me?

      Why should I do extra work with the express purpose of making my software more demanding in it's requirements?

      Very good question. Can't imagine a reason why you'd do something like that.

      After all, IE11 (and python 3.x) is the current version.

    8. Re:Wrong question by Anonymous Coward · · Score: 0

      To add to the parent: I think it's completely wrongminded to expect people to "upgrade" to a new version of a language. (Java, I'm looking at you, goddammit.)

      Eh? Since when does Java force you to upgrade? If you're dependent on a website (applet/webstart) that have upgraded, then it is the website that is forcing you not Java. If you are running a standalone Java app, JVMs of various version can live together. If you want to take on new features and the old version you're using doesn't have it then it is YOU forcing yourself to upgrade.

      If you are running an app on a 10 year old version of Java and suddenly you hit a JVM bug and there is no longer support to fix it, then it sounds like it is YOUR environment that has changed to used your app in a different way compared to the last 10 years to hit a bug. Then you'd have to upgrade, but not because of Java forcing you, but rather your environment.

      If you're just rolling out a new app with a 10 year old version... well then the problem is clearly between your keyboard and chair.

      Java doesn't force anything, it is corporate policies, user's requirements or providers that change and force your hand.

    9. Re:Wrong question by ebno-10db · · Score: 1

      no system is so isolated that some external hardware, OS, language or other upgrade cannot break otherwise healthy unchanged software

      True, but there's a difference between accepting that problems will always occur, and unnecessarily changing things in a way that means problems will occur more often. I may get killed on the way home from work tonight, but I'm not going to drive in a way that makes it much more likely.

    10. Re:Wrong question by EvanED · · Score: 1

      The author, Gregory Szorc, seems confused about what "support" means. What he appears to be complaining about is "Why do projects continue to require old Python releases?" (e.g. he says "I successfully transitioned Firefox's build system from requiring Python 2.5+ to 2.7.3+)

      Now I'm confused, because you seem to be saying the opposite of what I think you're saying.

      The projects don't require older releases, as you say: you can run Python 2.5 stuff on Py2.7. He's asking why people are resistant to requiring a later verison, aka why people continue to allow the older versions to work.

      Take the Firefox example. You say "It's the maintainers of those projects who do the work, not him." But... from what I can tell, he is a maintainer of the FF build system. So he does care -- he wants to be able to use the newer features of 2.7!

      And then he's wondering why other projects disagree with his approach.

    11. Re:Wrong question by Anonymous Coward · · Score: 0

      If it ain't broke, break it so you have something to spend your time fixing.

    12. Re:Wrong question by Anonymous Coward · · Score: 0

      How sweet. In reality some business do wait for it to break, because they invest in DR and accepts the fact that the cost and risk of fixing problems while you're in DR far outweighs the regular IT keep-up-to-date maintenance cost.

      It is a very reasonable approach if you've weighed all the risk and cost and made an informed decision. I've worked in business where they manual DR plan on top of their system DR where they could actually revert back to plain old pen and paper even if their systems go bonkers and re-key everything in later with an army of temp data-entry droids. It never happened in the 20 years of NOT upgrading the system. This is in a bank as well.

      This whole idea that everyone must upgrade regularly is a very idealistic and naive view of the world. It is a nice policy if the cost is negligible, but when it is not, it is perfectly reasonable to question it or even not adopt it as long as your due diligence is done and justifies it.

    13. Re:Wrong question by sjames · · Score: 1

      That is quite a different question. In general, if it runs on 2.5 it will run on 2.7.

    14. Re:Wrong question by sjames · · Score: 1

      The difference is that python 2.7 will likely run a program targeted at 2.5 just fine. The question in TFA (the wrong question) was about removing backward compatibility. You are speaking of adding forward compatibility.

    15. Re:Wrong question by RabidReindeer · · Score: 1

      no system is so isolated that some external hardware, OS, language or other upgrade cannot break otherwise healthy unchanged software

      True, but there's a difference between accepting that problems will always occur, and unnecessarily changing things in a way that means problems will occur more often. I may get killed on the way home from work tonight, but I'm not going to drive in a way that makes it much more likely.

      Too many people I know drive the same way home from work every day even when they know the bridge they take is scheduled for demolition, though. Figuratively speaking.

    16. Re:Wrong question by ebno-10db · · Score: 1

      If it's scheduled for demolition, then it probably wasn't a very good bridge to begin with. The Brooklyn Bridge has been in use for 131 years, handles car and truck traffic that it was never designed for, and is still in good shape.

      Ok, we're probably stretching the metaphor a bit now.

    17. Re:Wrong question by smash · · Score: 1

      This is why you write shims.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    18. Re:Wrong question by Anonymous Coward · · Score: 0

      I wish people in IT would stop saying "If it ain't broke". That's almost as bad as "All You Have To Do Is..."

      Computer systems don't decay in the literal sense. So in theory, once done, done forever.

      Reality, however, is different. Virtually no system is so isolated that some external hardware, OS, language or other upgrade cannot break otherwise healthy unchanged software.

      It will break. And according to Murphy, it's going to break at a time when the inconvenience, expense, and damage to your professional reputation can be maximized.

      Don't wait for it to break.

      I will die one day. I'm not looking to move that day forward.
      If I live to an old age, I'll end up in some kind of retirement community. I'm not looking to move that day forward.
      I'm going to need to be on various meds before then. I'm not looking to move that day forward.

      Do you see the pattern? Sometimes addressing a problem before it becomes a problem is futile. Some of the systems you're talking about will be retired before a problem eventuates. Others will deal with them as they arise. That is the RIGHT approach. Any other approach has you constantly making busy work for yourself "just in case". You can't see the future. DEAL WITH IT.

    19. Re:Wrong question by plopez · · Score: 2

      If you wait long enough you can then just jump to whatever the latest and greatest language happens to be. In 20 or 30 years it may be harder to continue to use Python than t would be to jump to Psychedelic Giraffe, or whatever the hot new programming language will be.

      --
      putting the 'B' in LGBTQ+
    20. Re:Wrong question by Anonymous Coward · · Score: 0

      Exactly. I have yet to find a case where 2.7 won't run code written for 2.5.

      Unless someone made a mistake of using "as" or "with" as a variable name.

    21. Re:Wrong question by sjames · · Score: 1

      It is possible, but I've never seen it happen. In those cases, adding forward compatibility is quite another matter.

    22. Re:Wrong question by Anonymous Coward · · Score: 0

      he wants to be able to use the newer features of 2.7

      He said nothing about that. He only said that he didn't want it to work with older versions, and that it was not a lot of work - i.e. it still took some amount of work - to make it not work with older versions. It already worked on new versions, so he could just have used the new features right away - and as a side effect, it would stop working on the older versions for free. But no, he did "not a lot of" work to specifically make it not work.

      Sounds to me like he wanted to deliberately break things[1]. The claim that he is a Firefox maintainer does not come as a surprise, that does fit well with the deliberately breaking things mindset.

      [1] This seems to be a popular thing these days. Recently, somebody who was not a kernel maintainer, posted on LKML arguing for dropping 32 bit x86 support entirely. Thankfully, none of the people who actually write the code agreed.

    23. Re:Wrong question by Anonymous Coward · · Score: 0

      Often it is the other way around. It's the external hardware that breaks your newly upgraded software. Because software people are so eager to upgrade, while hardware people are not (that requires taking the entire thing apart, and replacing components. Or buying a completely new machine, even though the old one won't wear out for another ten years).

    24. Re:Wrong question by dotancohen · · Score: 1

      Let's say I have something in python that was developed on python 2.5 and is in maintenance now. The correct question is why would I demand python 2.7 suddenly?

      Actually, I just recently started a new project and I'm coding it in Python 2.7 despite the fact that I much prefer Python 3 (byte/str makes sense in Python3, str/unicode in Python2 was and is a mess). The reason is that Python 3 does not have a decent MySQL connector. I hear complaints about thrid-party developers (mysqlf included) not supporting Python 3, but core Python language bindings that we depend upon don't yet even support Python 3. Here, let me quote to you directly from my project's FAQ:

      Why no Python3 support?
      There is no MySQL connector for Python3 yet.

      According to `git blame` I added that entry on 2013-12-04, just about a month ago.

      Here is the project for those interested in a database explorer with a focus on breadth, not depth:
      https://github.com/dotancohen/squeal

      --
      It is dangerous to be right when the government is wrong.
    25. Re:Wrong question by dotancohen · · Score: 1

      I hear complaints about thrid-party developers (mysqlf included) not supporting Python 3, but...

      One of those typos makes me laugh, especially given the context.

      --
      It is dangerous to be right when the government is wrong.
    26. Re:Wrong question by Skuto · · Score: 1

      >What he appears to be complaining about is "Why do projects continue to require old Python releases?"

      No, he doesn't. I re-read the article after reading your post and I have no idea where you get this.

      He really is talking about dropping support, i.e. no longer caring if it doesn't work on old Python versions.

    27. Re:Wrong question by Skuto · · Score: 2

      >He only said that he didn't want it to work with older versions, and that it was not a lot of work - i.e. it still took some amount of work - to make it not work with older versions

      He doesn't say that at all. Really. It's not even remotely in the article. He talks about dropping support for Python 2.6. This isn't an action involving work! It means you no longer care if it doesn't work in Python 2.6.

    28. Re:Wrong question by Anonymous Coward · · Score: 0

      The author, Gregory Szorc, seems confused about what "support" means. What he appears to be complaining about is "Why do projects continue to require old Python releases?" (e.g. he says "I successfully transitioned Firefox's build system from requiring Python 2.5+ to 2.7.3+)

      I think you have it backwards not the author. "I successfully transitioned... from requiring Python 2.5+ to Python 2.7.3+" means he used to have a system that support Python 2.5 and higher. He now has a system that supports only Python 2.7.3 or higher. In other words, the system now requires at least Python 2.7.3 and no longer supports 2.5, 2.6, etc.

    29. Re:Wrong question by RabidReindeer · · Score: 1

      If it's scheduled for demolition, then it probably wasn't a very good bridge to begin with. The Brooklyn Bridge has been in use for 131 years, handles car and truck traffic that it was never designed for, and is still in good shape.

      Ok, we're probably stretching the metaphor a bit now.

      "If builders built building the way that programmers program programs, the first woodpecker to come along would destroy civiliization."
          - Gerald Weinberg

    30. Re:Wrong question by rdnetto · · Score: 1

      The reason is that Python 3 does not have a decent MySQL connector.

      And that's precisely what this article is about - supporting pre-2.7 and 3.x are almost mutually exclusive due to changes in the language. Once written in 2.7, it's often possible to support 3 via a tool like six.

      --
      Most human behaviour can be explained in terms of identity.
  4. It's simple, its Redhat by Anonymous Coward · · Score: 2, Informative

    Get Redhat to upgrade their version of Python, then the developers will use it. Until then if you want to write portable code, you ignore the newer features.

    1. Re:It's simple, its Redhat by Anonymous Coward · · Score: 0

      RHEL 7 is running late. It will include this, but expect *a lot* to break. And do not get me *started* on the switch to systemd, NetworkManager, and an installer written by monkeys trying to write Hamlet, who can't even put the "Done" button in the same place on two screens in a row.

    2. Re:It's simple, its Redhat by MikGue · · Score: 1

      Since you asked. :) Red Hat now offers Python 2.7 and 3.3 via a new mechanism called Software Collections. Other languages (Ruby, PHP, Perl, Node.js) and databases (MySQL, MariaDB, PostgreSQL) too. Read an introduction here: http://developerblog.redhat.com/2013/09/12/rhscl1-ga/ With Software Collections, you can install different versions of Python (e.g 2.6, 2.7, 3.3) along side each other and avoid collision.

    3. Re:It's simple, its Redhat by FlipperPA · · Score: 1

      +1 on RedHat. We're on RHEL6, still updating to the "latest" as 2.6.6 through yum. (No, RedHat was NOT my choice.)

      We've jumped through hoops to get up to 2.7.5 to support SQLAlchemy, Django and Flask fully. Bless you, virtualenv.

  5. One Word by connor4312 · · Score: 2

    CentOS

    1. Re:One Word by Anonymous Coward · · Score: 0

      CentOS

      Ah! So instead of updating Python, we should change our OS.

      ALrighty Then!

    2. Re: One Word by Anonymous Coward · · Score: 0

      I worked at a company that used CentOS and they wouldn't upgrade Python for production environments because newer versions weren't certified to be stable.

      Even though common sense says they are.

    3. Re: One Word by RabidReindeer · · Score: 2

      I worked at a company that used CentOS and they wouldn't upgrade Python for production environments because newer versions weren't certified to be stable.

      Even though common sense says they are.

      When core OS services are written in Python (and they are in CentOS/Red Hat), it doesn't matter how stable the newer releases are.

      If they don't perform exactly identically, there's a real risk that the OS itself may malfunction.

    4. Re:One Word by kthreadd · · Score: 1

      CentOS

      Ah! So instead of updating Python, we should change our OS.

      ALrighty Then!

      No. You should install Python 2.7/3.3 from the Red Hat Software Collection. It is supported on RHEL, and I'm sure CentOS rebuilds the packages. You end up with new versions of Python in a separate location that you can use when needed, and leave the system Python alone.

  6. Change = bugs by mveloso · · Score: 3, Insightful

    Change means bugs. Why would you want to disrupt your production system to fix bugs introduced in a new release? What benefit would there be to you?

    The system is built, and it works. Don't touch it unless you have to, or unless it was designed to be upgradeable.

    1. Re:Change = bugs by Anonymous Coward · · Score: 0

      Change means bugs. Why would you want to disrupt your production system to fix bugs introduced in a new release? What benefit would there be to you?

      Because change is inevitable. It's better to fix a bug or two now then tons of bugs later when you can no longer use your old version.

  7. Because it works. by Animats · · Score: 5, Insightful

    Many Linux distros in wide use still come with Python 2.6 as the stock Python. If you have some little program that needs to be portable, you write for Python 2.6 and test on 2.6 and 2.7.

    People aren't converting to Python 3 for the same reason Perl users aren't converting to Perl 6 - it's different and incompatible. Many third party Python 2.x packages were never ported to Python 3. Some were replaced by new packages with different APIs, which means rewriting code and finding out what's broken in the new packages. Newly written programs tend to be written for Python 3, but much old stuff will never be ported.

    1. Re:Because it works. by StripedCow · · Score: 1

      Indeed. A similar question would be why people aren't "upgrading" from Python to Java.
      It's a different language. Period.

      --
      If Pandora's box is destined to be opened, *I* want to be the one to open it.
    2. Re:Because it works. by shutdown+-p+now · · Score: 1

      Many Linux distros in wide use still come with Python 2.6 as the stock Python.

      How many, actually? So far the only one that has been named explicitly is RHEL.

    3. Re:Because it works. by shutdown+-p+now · · Score: 2

      Python 2.x and 3.x are definitely much more similar than Python and Java, or even than Perl 5 and Perl 6. Especially when you look at 2.7 and 3.3 (where both versions had bits and pieces added to make syntax more uniform - like adding b"" literals to 2.7 and u"" literals to 3.3), it's actually quite easy to write code that's valid and behaves identically on both.

    4. Re:Because it works. by Anonymous Coward · · Score: 0

      it's actually quite easy to write code that's valid and behaves identically on both.

      The point is that it's equally easy to write code that _doesn't_ behave identically on both.

    5. Re:Because it works. by shutdown+-p+now · · Score: 1

      Sure, it is. You need to know what you're doing to pull that off. It's still a much better situation than Perl 5 vs 6.

    6. Re:Because it works. by MikeBabcock · · Score: 1

      The requirement to use parentheses and the change in string handling (while both wonderful) cause major parsing differences between python2 and python3.

      Surely someone must have written a "python2to3" conversion tool by now :)

      --
      - Michael T. Babcock (Yes, I blog)
    7. Re:Because it works. by Anonymous Coward · · Score: 0

      SuSE Linux Enterprise Server 11 and considering SLES and RHEL are the two biggest enterprise distributions for a language that carries its roots as a systems admin language that is a pretty big deal.

    8. Re:Because it works. by kevingolding2001 · · Score: 1

      How many, actually?

      It depends on how you count it. The number of different 'versions' of distro? 1 or 2
      The number of different 'installations' of that distro? Many, many more.

    9. Re:Because it works. by shutdown+-p+now · · Score: 1

      Python 2 and Python 3 do have noticeable differences when it comes to parsing, but this causes more headache to the implementations and various tools (like IDEs). From programmer's perspective, it's not all that hard to write code that parses and has the same meaning on both.

      The requirement to use parentheses

      You mean, in print? On 2.7, you can just "from __future__ import print_function". But on any version, the helpful trick is that (x) is the same as x, and so print(x) is valid Python 2, and has the same meaning as Python 3. So if you do all formatting with format() or %, and only pass the resulting single string value to print, you can just wrap it in parens and it'll work everywhere.

      Or just work directly with stdout - that's exactly the same on both versions.

      and the change in string handling

      Quite a lot of code doesn't actually care, insofar as they take something that they treat as a string, process it using string operations, and pass it on. The only difference for such code is that in 2.x it'll work on both str and unicode, while in 3.x it'll only work on unicode and not bytes. In many cases it doesn't matter at all. Sometimes, it means that the app can no longer handle non-unicode input, but that may not matter in practice, either.

      For code that was using str as a generic byte array (e.g. for manipulating binary data), you replace all mentions of str with bytes (and, for portable code, alias bytes to str if you're on 2.x), and use slices to get individual bytes - i.e. write b[x:x+1] instead of b[x]. This works around the difference in indexing between 2.7 str returning a 1-char str and 3.3 bytes returning an int.

      For code that is working with both byte and unicode strings (e.g. when reading bytes from a socket and explicitly converting them to str), in many cases, it is sufficient to set up aliases for bytes=str on 2.7, and for unicode=str on 3.3, and then use bytes and unicode exclusively. If on 2.7 and 3.3, it also helps a lot that b"" and u"" literals can be used on both; on previous versions you'd have to set up helper functions to wrap all literals and convert where necessary.

      The only code that is truly a pain in the ass to port is the one that worked directly with byte strings, but insisted on treating them as strings rather than a byte array - e.g. tried formatting them etc. In many cases, it was actually broken code that didn't handle input encoding properly and would break on valid non-ASCII input, so porting is an opportune time to fix that. In some cases, it does actually have legitimate reasons to do what it did, and that's when you have to do non-trivial rewriting to do the same on 3.x - but that is rather rare.

    10. Re:Because it works. by MikeBabcock · · Score: 1

      An awful lot of us started learning Python with things like customerdata[n:12] (where n is the result of a search) to grab some data. Now with Unicode set by default, that string could be 12, 24, even 48 bytes long and needs more parsing to be done. Like I said, its a good change, but it breaks things by default.

      --
      - Michael T. Babcock (Yes, I blog)
    11. Re:Because it works. by shutdown+-p+now · · Score: 1

      An awful lot of us started learning Python with things like customerdata[n:12] (where n is the result of a search) to grab some data. Now with Unicode set by default, that string could be 12, 24, even 48 bytes long and needs more parsing to be done.

      When you're indexing Unicode strings, the length is in Unicode characters (or rather, codepoints), not bytes. So if the result of the find is 12 characters long, then indexing will work exactly the same as before, you don't need to change anything there.

      OTOH, when dealing with non-Unicode strings, you'd have to be aware of the fact that a single element (i.e. byte) in a string does not necessarily correspond to a single character or even a single codepoint, what with UTF-8 and all.

    12. Re:Because it works. by Anonymous Coward · · Score: 0

      Indeed, they should have called Python 3 and Perl 6 something else.

      Best example here is Nikolaus Wirth: Pascal's successor was Modula-2 whose successor was Oberon.

      Yes they had a lot of similarities but they were incompatible.

      I was rather pissed off when (IIRC) python 2.4 broke one of my applications and I simply will not have anything to do with Python 3.

    13. Re:Because it works. by spitzak · · Score: 2

      On the parenthesis: It looks like it would have been possible to make the parser (or at least the command line input) parse "AB" into the same result "A(B)". Perhaps this conflicts with some part of Python syntax somewhere but I don't see it right now. This would then allow print to work as before, and would also make things like "help foo" typed on the command line work.

      Strings however are a serious impediment to 3.0. You are blissfully ignoring the huge problem: a range of bytes can contain any arrangement, including invalid UTF-8. Just because you read them into a "string" does not magically make this go away. Python's insistence on either converting to UTF-16 or making it impossible to use character functions really makes it impossible to do string manipulation with data that comes from arbitrary sources. For instance the simple act of 'foo == "constant"' can now throw an exception if foo contains an encoding error! That is so bogus I don't know what to do.

      Strings should be 8 bits and contain every single possible arrangement of bytes, whether it is valid in an "encoding" or not. And if you really want to get a "character" (which in fact you almost NEVER are interested in, instead you are interested in subsections of the string) then programmers should use *ITERATORS*. Then you can use the correct iterator for the encoding you want, such as whether you want precomposed or decomposed Unicode code points, or UTF-16 code units, or you know this string is ISO-8859-1, and it can clearly return indicators for invalid encodings and never ever throw an exception!

      Until Theo gets this through his thick skull (he seems to have a total blockage of understanding that text is a stream and interpretation should be DEFERRED) then it will be impossible to switch to Python 3.0. Python 2.0 at least preserves an arbitrary array of bytes in a string object, though I have to be really f**King careful never to use "unicode" anywhere because it may throw an exception when I don't want it.

    14. Re:Because it works. by spitzak · · Score: 1

      The "length" of a Unicode string should be an indication of how much memory it takes to store it in a desired encoding.

      The belief that somehow this thing called a "character" is important needs to be stamped out. Look up combining characters and compostions/decomposition and how other languages treat characters to realize this. Any code that thinks it can do something with a single Unicode code point is by definition broken and it would be nice if the language was designed to make this not so tempting or easy to use, especially because it slows down string processing and causes exceptions from invalid text to be thrown at unexpected and useless times, causing denial of service bugs. I would have indexing as string return a code unit (because code units are useful as they are data that is streamed and because it won't break code that is just looking for some ASCII like spaces and treating all other "characters" the same).

      If you want a "character" Python should force use of an ITERATOR. There can be many different iterators (such as whether you want precomposed or decomposed "characters"). They can return an indication of error including exactly the byte sequence that is considered an error, without throwing exceptions and without lossy conversion of errors to something that can't be distinguished from valid text.

      Python has a chance to get us out of the dark ages of text but not as long as brainless people keep saying "character"!!!

    15. Re:Because it works. by shutdown+-p+now · · Score: 2

      On the parenthesis: It looks like it would have been possible to make the parser (or at least the command line input) parse "AB" into the same result "A(B)". Perhaps this conflicts with some part of Python syntax somewhere but I don't see it right now. This would then allow print to work as before, and would also make things like "help foo" typed on the command line work.

      It wouldn't actually fix print as the differences are much more than that. 2.7 print had a lot of funky syntax in it - e.g. you could use >>stream as the first argument to print to a given stream rather than stdout, and then there's trailing-comma-meaning-no-newline (a la BASIC). I don't think these can be uniformly handled without treating print specially, and the whole point of the change was to stop doing so. I think it's a good thing, too - there's really no reason to single out print, and when teaching the language, it makes more sense when everything's uniform; so you explain print first, and then when you get to functions, people basically already know the syntax.

      Strings however are a serious impediment to 3.0. You are blissfully ignoring the huge problem: a range of bytes can contain any arrangement, including invalid UTF-8. Just because you read them into a "string" does not magically make this go away. Python's insistence on either converting to UTF-16 or making it impossible to use character functions really makes it impossible to do string manipulation with data that comes from arbitrary sources.

      I am aware of your opinion regarding Unicode handling in string types - we have discussed this before, and I don't want to repeat that. I have to note, though, that the model used in Python is basically the same model as adopted by most other major frameworks and languages (.NET, Java, Cocoa, Obj-C etc).

      For instance the simple act of 'foo == "constant"' can now throw an exception if foo contains an encoding error! That is so bogus I don't know what to do.

      How so? It would just compare them codepoint by codepoint. If the input was not valid in the encoding specified, then the error would have been thrown then, when trying to encode it as str, not when comparison happens.

      Python 2.0 at least preserves an arbitrary array of bytes in a string object, though I have to be really f**King careful never to use "unicode" anywhere because it may throw an exception when I don't want it.

      Python 3 has the same thing, it's just now called "bytes" - more appropriately so (and 2.6+ aliases "str" as "bytes" for forward compatibility). You would, of course, have to still be careful to never use "str", but overall it sounds like there's no practical difference here language-wise. Also, most string operations that make sense for bytes still work, like concatenation, indexing and slicing, and methods like find or count. Basically every single method that str had in 2.7, excepting isalpha() etc, format() and encode(), for obvious reasons.

      Where the difference does exist is when it comes to libraries, which will generally refuse to accept bytes for string data. But that's not new to 3.x, either - quite a few libraries for 2.6/2.7 have migrated to "unicode everywhere" string handling scheme, too, because it's less headache for them overall.

    16. Re:Because it works. by spitzak · · Score: 1

      Good points about the print syntax, though I think handling space the way I said would get a large number of these. Maybe it could be done for the command prompt only, which would help.

      The reason 'foo == "constant"' can throw an exception is that it will try to convert foo to "unicode" and can throw an exception on any encoding errors. I don't want that, I want it to return false. Note that Python2.x does this as well if you put 'u' in front of the constant, and it considers every byte with the high bit set an error, so it is perhaps worse...

      As you point out, "bytes" do not have isalpha() or a lot of other stuff. Therefore they are useless. I cannot do even the most trivial text operations on arbitrary data that contains "mostly" text (ie perhaps a UTF-8 string that got one byte of garbage added to the
      end...).

      I should be able to search a 'bytes' for 'A' without thinking about encodings. I should be able to do at least isspace(). isalnum() might be nice as well. All of this is incredibly difficult, or you will write programs that throw unexpected exceptions and thus you have made a nice denial of service bug.

      They can fix this. Add some isalpha()/etc stuff to "bytes" so that I can use them (just assume it is ASCII and for bytes with the high bit set all these tests return the same value, for instance true for isprint()). Let me search for a string constant as long as it is an ascii letter. If I compare bytes to unicode, convert the unicode TO UTF-8 and do the comparison, not the other way around, you idiots. And add a way to turn a quoted string containing Unicode directly into a bytes object, ideally if the source code is itself UTF-8 then the exact bytes, including errors, between the quotes are placed into the constant.

      They should be required to make a file containing Unicode text and exactly one non-UTF-8 byte and all apis must be required to read and write this file, allowing all readable text to be accessed, and obvious methods of copying it must preserver the bytes in it.

    17. Re:Because it works. by shutdown+-p+now · · Score: 1

      The reason 'foo == "constant"' can throw an exception is that it will try to convert foo to "unicode" and can throw an exception on any encoding errors. I don't want that, I want it to return false. Note that Python2.x does this as well if you put 'u' in front of the constant, and it considers every byte with the high bit set an error, so it is perhaps worse...

      Python 3.x does not have a type named "unicode" (what was "unicode" in 2.x is called "str" in 3.x, and what was called "str" in 2.x is called "bytes" in 3.x). And it does not do any implicit conversion between bytes and unicode. So if foo is not a str object, it will immediately throw saying that types are incompatible.

      Auto-conversion between str and unicode is something 2.x does.

      As you point out, "bytes" do not have isalpha() or a lot of other stuff. Therefore they are useless. I cannot do even the most trivial text operations on arbitrary data that contains "mostly" text (ie perhaps a UTF-8 string that got one byte of garbage added to the
      end...).

      I actually said something very different - that bytes has all methods that str did in 2.7, except for isalpha, format and encode. So I have to ask, what kind of trivial text operations were you unable to do on a bytes object?

      Let me search for a string constant as long as it is an ascii letter.

      If you treat b"..." as string literal (which you should if you treat bytes as your string type), then you can do that - x.find(b"foo") works just fine.

      If I compare bytes to unicode, convert the unicode TO UTF-8 and do the comparison, not the other way around, you idiots.

      Bad idea, because it implicitly assumes that all bytes are UTF-8, which is plainly not the case. No, this should raise an exception, and require you to explicitly specify encoding on either side (i.e. if you need UTF-8, then use decode('utf-8') on the string and then == will compare the resulting bytes object byte by byte).

      As noted earlier, any implicit bytes/str conversions are disabled in 3.x.

      And add a way to turn a quoted string containing Unicode directly into a bytes object

      b'...' does just that.

    18. Re:Because it works. by spitzak · · Score: 1

      My actual desire is to be able to use UTF-8, yet retain the ability to name a file that has an invalid UTF-8 name. Currenlty the Python3 libraries do not provide a function that does this. This is incredibly inconvienent, and I am pretty much forced to do what everybody does, which is abandon use of UTF-8 and Unicode, using raw bytes for everything.

      I don't think b'...' works correctly for non-ASCII characters. I want the byte sequence for UTF-8. In particular I want it if I type in '\u1234' (note that '\x89' should still produce the byte for compatibility and to retain the ability to make invalid UTF-8, if I want the unicode character U+89 then I have to put in '\u0089'). In addition it would help considerably that if the source code is UTF-8 then b'...' will copy the bytes between the quotes exactly, whether or not they are valid UTF-8. This will allow code written using legacy encodings to continue to work.

      BTW Python3.3 and up have abandoned the 2.x "unicode" object entirely. Instead they are using a union of ASCII-or-UTF-8, UCS-2, and UTF-32, transparently converting between these depending on what requests were done and what the ranges of characters are. This is getting a lot closer to what is needed but I would like the following added:

        1. VITAL: add the ability to store invalid UTF-8. It does not throw an exception unless an attempt is made to actually access unicode "characters". In particular it does not throw an exception if written to a byte stream.

        2. Add ability to index the UTF-8 code points, thus allowing looking at code points without throwing exceptions

        2a. Probably add the ability to index UTF-16 by reusing the UCS-2 for this just like it uses the ASCII for UTF-8. I am suggesting this because I suspect people working with UTF-16, such as the hordes of Windows programmers will have the same problems I am having with UTF-8.

        3. String constants are stored in the UTF-8 form if they contain UTF-8 encoding errors. \xNN and \OOO escapes can be used to write UTF-8 encoding errors in source code that is itself not in UTF-8. (UTF-16 errors are a bit easier as \uNNNN can be used for these without conflict).

      In addition a number of libraries need a bit of patching so they don't throw exceptions. For instance on Windows asking if a file exits where the filename is a bad UTF-8 string should return false, not throw an exception. An easy way is to make conversion never throw an exception by converting the bad bytes to 0xDCxx (which is what Python 3 does with command line arguments) but that could be dangerous.

    19. Re:Because it works. by 31eq · · Score: 1

      foo == "constant" will not throw an exception. It does not coerce anything. If foo is not a string, it will return false.

      The bytes type does have isalpha(). At least in 3.2.3. It really does.

      You can't search bytes for 'A' without thinking about encodings because encodings matter. You can search bytes for b'A'.

      They have added isalpha() to bytes. They do assume it is ASCII if it's in the ASCII range.

      If you want to compare bytes with str, you can do the encoding if you know what you want. The language will refuse the temptation to guess.

      You can turn a quoted string into a bytes object: by decoding it.

      If the source is UTF-8, it won't have errors. Errors are, by definition, not UTF-8. The parser will refuse the temptation to guess what encoding you meant.

    20. Re:Because it works. by 31eq · · Score: 1

      Help on built-in function encode:

      encode(...)
          S.encode(encoding='utf-8', errors='strict') -> bytes

          Encode S using the codec registered for encoding. Default encoding
          is 'utf-8'. errors may be given to set a different error
          handling scheme. Default is 'strict' meaning that encoding errors raise
          a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
          'xmlcharrefreplace' as well as any other name registered with
          codecs.register_error that can handle UnicodeEncodeErrors.

    21. Re:Because it works. by spitzak · · Score: 1

      The equality test was probably a poor example. You are right that Python will return false if the types are different.

      Passing a string to a function taking Unicode in Python2.x is the problem: it will throw exceptions unexpectedly on bad UTF-8. It does sound like Python3.x throws an exception *always* which I suppose is better, because my code will not work unless I call my translate-without-an-exception function. Still really annoying.

      You can indeed search for 'A' without worrying about the encoding. It is the value 65 in every encoding that anybody will ever encounter on a modern system. That is why I want it to work without having to think about encodings.

      And I'm sorry, pretending that certain byte arrangements are "not UTF-8" and therefore will just magically not appear because the string "is UTF-8" is wishful thinking and showing a complete ignorance of physical reality. People store NaN in floating point and don't say "that won't happen". They should learn to do this with text.

  8. RedHat by SoftwareArtist · · Score: 5, Informative

    The Python version included with RHEL 6 (that's the very latest version): 2.6
    The Python version included with RHEL 5 (still widely used): 2.4

    Thank them for forcing us to keep supporting old versions.

    --
    "I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
    1. Re:RedHat by Trepidity · · Score: 1

      Debian stable was on older Pythons until recently also, but Debian 7.0 (released May 2013) now has 2.7 default.

    2. Re:RedHat by mcrbids · · Score: 1

      As a user of Red Hat's products, I applaud Red Hat for giving me what I wanted: a stable, secure environment for server-based application development.

      When I set up a RHEL install, I don't expect to upgrade for a *long* time - at least 5 years and up to 10. We switched from RHEL 4 to RHEL 6 about 2.5 years ago after almost 6 years of continued use.

      Fedora comes out every 6 months or so, and EOLs after a year. Want the latest? Go get it! I, for one, have no desire to do a full upgrade cycle any more often than I have to.

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    3. Re:RedHat by Anonymous Coward · · Score: 0

      It should be noted that the last version of 2.6.x was released on 29 October 2013, and the first release of 2.7 was released on July 3, 2010.
      It also appears that the first mention of 2.6.9 being the final 2.6.x release, was announced only a month before (https://mail.python.org/pipermail/python-dev/2013-September/128287.html). NB: This is hard to pin down, as it seems a lot of the roadmap type documents were updated after the final release.

      When you're releasing a business focused distribution that advertises a stable feature set for 5 years this is to be expected.

      Red Hat Enterprise Linux 7.0 Beta includes Python 2.7.5.
      However if you'd like to use 2.7 or 3.3 on your RHEL box now, you can via "Red Hat Software Collections"

    4. Re:RedHat by Anonymous Coward · · Score: 0

      Yup, this is the kicker. 2.4 is pretty terrible if you are (like me) used to working in 3.x. There is a lot of stuff missing.

      Hell, I've recently had to work in a 2.1 environment - that is before booleans and dictionary literals were in the language. It really does suck.

    5. Re:RedHat by mwlphelps · · Score: 1

      The Python version included with RHEL 6 (that's the very latest version): 2.6 The Python version included with RHEL 5 (still widely used): 2.4

      Thank them for forcing us to keep supporting old versions.

      RHEL and its free variants, notably CentOS and Scientific Linux. The Python version mess is a HUGE issue in the academic sciences. The users I support, astrophysicists, are using a lot of Python and it's a gigantic mess.

    6. Re:RedHat by kthreadd · · Score: 1

      If you're on Red Hat you can install the Red Hat Software Collection, an add-on package that adds 2.7 and 3.3 to the system.

    7. Re:RedHat by MikGue · · Score: 1

      Repeated from above in case you missed it. Red Hat now offers Python 2.7 and 3.3 via a new mechanism called Software Collections. Other languages (Ruby, PHP, Perl, Node.js) and databases (MySQL, MariaDB, PostgreSQL) too. Read an introduction here: http://developerblog.redhat.com/2013/09/12/rhscl1-ga/ [redhat.com] With Software Collections, you can install different versions of Python (e.g 2.6, 2.7, 3.3) along side each other and avoid collision.

  9. Offline side-by-side Python by tepples · · Score: 2

    If all my customers are running offline RHEL 4, I'm stuck with python 2.3.

    How do you deliver an application to your offline users? And why can't you deliver an up-to-date side-by-side version of Python along with it?

    1. Re:Offline side-by-side Python by Anonymous Coward · · Score: 3, Insightful

      Because he doesn't want the support calls headache? Using the RH-provided Python makes it RH's responsibility to support rather than the ISV's.

    2. Re:Offline side-by-side Python by Ksevio · · Score: 2

      Giving someone a standalone software package is different than upgrading a system package. Offline systems can be upgraded with a USB stick, but it's harder to do a system update that way.

    3. Re:Offline side-by-side Python by tepples · · Score: 2

      Then make python2.7 "a standalone software package" installed along with your application.

    4. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      And have to be on the hook if the Python install breaks something? You're joking, right?

      And that's assuming your customers would even allow it since it would be unsupported by RH.

    5. Re:Offline side-by-side Python by Anonymous Coward · · Score: 2, Informative

      You can: python virtualenv

    6. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      Why would a Python install break something, if it's installed side by side with your app?

      If you don't want to break the OS, don't touch /usr at all, it's as simple as that - and it has always been possible on Linux.

    7. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      Because such arrogance always precedes the very act in breaking things in ways unimagined by the "nothing can go wrong" guy. Simply sticking with system-installed Python means you never need to worry.

    8. Re:Offline side-by-side Python by Penguinisto · · Score: 1

      Why would a Python install break something, if it's installed side by side with your app?

      ...as long as everything you call script/daemon-wise reads "python27 /path/to/my/new_product.py" , sure.

      Unless you want the sysadmins to love the idea of re-jiggering links. 'course, that might break dependent packages, other python bits running on the same box, etc.

      --
      Quo usque tandem abutere, Nimbus, patientia nostra?
    9. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      You still haven't explained how one can break a system by copying a bunch of files to /opt/yourapp. Yes, there are techniques where truly "nothing can go wrong", within certain reasonable limits. Knowing and applying those techniques is part of the skill set in this industry. If absolutely everything could break everything else, we'd never get things done.

      Sticking with system-installed Python means that you need to worry whenever that system decides to update the version of Python that it uses.

    10. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 2

      Ideally, the sysadmins should not even be aware that you're using Python. The entry point should be a shell script that will spin up the appropriate Python interpreter from the directory that was bundled with the app, and that shell script is what's referenced from crontab, service scripts etc.

    11. Re:Offline side-by-side Python by RabidReindeer · · Score: 1

      If all my customers are running offline RHEL 4, I'm stuck with python 2.3.

      How do you deliver an application to your offline users? And why can't you deliver an up-to-date side-by-side version of Python along with it?

      Anaconda - Red Hat's automated boot-time hardware configurator - is one of several critical RHEL components written in Python.

      If you swapped out the Python that came with the system with a new, incompatible Python, chances are good that it break so hard it wouldn't even be able to boot up.

    12. Re:Offline side-by-side Python by RabidReindeer · · Score: 1

      Python is like Java in that it isn't simply a single program, it's a complex web of programs, libraries and model classes.

      Although Java was expressly designed to permit multiple versions to co-exist and even execute at the same time in the same system, I'm less certain that you can do that with Python. At least without at least doing a chroot or a VM. Which isn't so much making the affected app play well with other systems that use other Python versions as it is setting up the app in a little world of its own.

      Which has a certain appeal, but I doubt that users in general would go for it.

    13. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      Python is like Java in that it isn't simply a single program, it's a complex web of programs, libraries and model classes.

      Yes, and they can all live under a single directory, isolated from everything else. That's exactly how Python works on Windows out of the box (it also installs its main DLL into System32, but that is really unnecessary, and many Python distros don't do it - and don't even have installers at all, like WinPython).

      Python is actually less magical than Java in that regard, since you can fully control what gets loaded from where if you host it yourself.

    14. Re:Offline side-by-side Python by SerpentMage · · Score: 1

      I am going to have to agree with anonymous on this. Sure you think that nothing can go wrong. BUT if it were, will you be there to figure it out? Are you going to fix it? Probably not because you are already working on the next version of whatever you are working on. And that will be bleeding edge and your answer will be "upgrade it" and all will be fixed. Seen this quite often.

      Let me ask what about the permissioning of /opt? Who owns it? http://askubuntu.com/questions/169314/default-permissions-for-opt-directory

      Ah yes... So what this means is that if somebody screws around the system and changes the paths you app might break. Or maybe somebody saw a new version of python and decided to link to it. Yes whoever does that needs to be take outside to the woodshed, but it does not stop the task from happening. The problem is not that you can manage things, but whoever gets the box after you and they don't understand.

      BTW if I ever have to get into such a situation my best approach has been to install everything under a specific user (meaning into their home directory). That way the user cannot break the app, though the user can have their app broken. That to me is a much better compromise and easier to pinpoint when things do go wrong.

      --

      "You can't make a race horse of a pig"
      "No," said Samuel, "but you can make very fast pig"
    15. Re: Offline side-by-side Python by Anonymous Coward · · Score: 0

      He said side by side, not Replace.

      Install python 3.x in /opt/python3, have shell scripts that run your app setup paths properly, Viola. No conflict.

    16. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      You have OBVIOUSLY never had to support offline production systems. Let me tell you how this goes:

      apt-get install --from-disk python2.7 ...
      Good ...
      sudo build-root *ANY PROGRAM WHICH REQUIRES PYTHON* ...
      ?> WTF WTF WTF WTF? Error related to dependency, error related to code, error related to source compile, error related to install script needing 2.6, error related to uninstall needing pythong 2.6, any number of other errors.

      Alternately:
      sudo apt-get *all docs for python 2.6 compatibility* --install-to *disk* ...
      take disk to offline computer ...
      sudo apt-get install --from-disk * ...
      your software breaks

    17. Re:Offline side-by-side Python by Nutria · · Score: 1

      Although Java was expressly designed to permit multiple versions to co-exist and even execute at the same time in the same system, I'm less certain that you can do that with Python. At least without at least doing a chroot or a VM.

      Maybe Windows Python is that incompetent, but Un*x Python has had seamless multiversioning for 10+ years. (Well, that's how long Debian and it's derivatives have been doing it...)

      --
      "I don't know, therefore Aliens" Wafflebox1
    18. Re:Offline side-by-side Python by ThePhilips · · Score: 2

      Sticking with system-installed Python means that you need to worry whenever that system decides to update the version of Python that it uses.

      "That system" would never "[decide] to update the version of (whatever)" because RedHat provides guarantees of that.

      If RedHat would start sending its RHEL users such updates, the next thing the users would do is to migrate to SuSE' SLES or CentOS.

      Remember, not every upstream is as fsckd up as GNOME or Mozilla or Google. Even MSFT is much much more sensible in that regard.

      --
      All hope abandon ye who enter here.
    19. Re:Offline side-by-side Python by whoever57 · · Score: 1

      Although Java was expressly designed to permit multiple versions to co-exist and even execute at the same time in the same system, I'm less certain that you can do that with Python.

      Gentoo manages it.

      --
      The real "Libtards" are the Libertarians!
    20. Re:Offline side-by-side Python by Cramer · · Score: 0

      Said by someone who clearly has not tried to run multiple versions of python on the same system. Unless you built the non-system versions specifically to NEVER look outside your own locked down, version dependent install, it's going to touch system-wide, non-versioned areas, and in the process either itself fail, or touch something causing the system python to fail. And when your system package manager depends on he system python, you've created a lot of work for yourself.

      This is entirely why over 90% of cases, the python in use is the one that shipped with the distro. (since windows doesn't ship with python, there are far less non-versioned overlap.)

      Building it yourself can also be a bigger pain than upgrading the OS. Say you need py3 on an old redhat 9 (or centos 4) platform. Good luck, as it'll require building/upgrading hundreds of libraries and additional dependencies. (this is why we couldn't upgrade trac without rebuilding the server.)

    21. Re:Offline side-by-side Python by chmod+a+x+mojo · · Score: 0

      Let me ask what about the permissioning of /opt? Who owns it?

      Who cares about /opt? You can have your install script make users, setuid, et all and set permissions on your application directory, meaning that unless you are giving high level privileges to some moron who will link to a random non-system library you will have no problems since your users will never be able to see / read the contents of the dir.

      BTW, /opt with permissions on the applications DIR for specific users is much safer than $HOME since the user can't just "delete a bunch of stuff to get some more space" ( worst case is they delete symlinks / *.desktop files).

      --
      To err is human; effective mayhem requires the root password!
    22. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      I am going to have to agree with anonymous on this. Sure you think that nothing can go wrong. BUT if it were, will you be there to figure it out? Are you going to fix it? Probably not because you are already working on the next version of whatever you are working on. And that will be bleeding edge and your answer will be "upgrade it" and all will be fixed. Seen this quite often.

      This is true of anything that can possibly go wrong with the app, anywhere. There's no reason to treat this particular thing as exceptional.

      Let me ask what about the permissioning of /opt? Who owns it?

      Why is this relevant? You only care about your particular subdirectory inside /opt. For that, permissions can be set the way you need them to be set.

      (in any case, the question of who owns it is no more relevant than who owns /usr - you generally don't care about that, only that you have +rx on your own files)

      Ah yes... So what this means is that if somebody screws around the system and changes the paths you app might break.

      Why would it break? You shouldn't rely on PATH for your own code. If the user adds your /opt/foo to PATH so that he can launch the app by typing "foo.sh" rather than "/opt/foo/foo.sh", it's up to him, but you should correctly handle both.

      Or maybe somebody saw a new version of python and decided to link to it. Yes whoever does that needs to be take outside to the woodshed, but it does not stop the task from happening. The problem is not that you can manage things, but whoever gets the box after you and they don't understand.

      It seems that you're talking about one-off custom installs here? In that case, the proper way of handling various system customizations is documenting them in the admin log, that you transfer to the next person who will maintain that system after you.

      OTOH, I was actually talking about "shrinkwrapped" software. For those, you'd generally write an installer that sets up the system appropriately, and document what you do and where things are. If you've ever installed proprietary software (esp. games) on Linux, you have probably seen how it works.

      BTW if I ever have to get into such a situation my best approach has been to install everything under a specific user (meaning into their home directory). That way the user cannot break the app, though the user can have their app broken. That to me is a much better compromise and easier to pinpoint when things do go wrong.

      I don't see that buying you much. If the concern is that a low-privileged user shouldn't be able to break the app, then just don't give him +w on /opt (indeed, no-one but sysadmin should generally have +w on anything in /opt, it's like /usr in that regard). And the app is no more isolated in ~user/foo than it is in /opt/foo.

    23. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      "That system" would never "[decide] to update the version of (whatever)" because RedHat provides guarantees of that.

      Do they provide such guarantees even for point releases? i.e. that, say, Python 2.7.4 will never be updated to Python 2.7.5?

    24. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      Said by someone who clearly has not tried to run multiple versions of python on the same system. Unless you built the non-system versions specifically to NEVER look outside your own locked down, version dependent install, it's going to touch system-wide, non-versioned areas

      Can you give an example of that, one that cannot be changed by providing the appropriate flags and/or PYTHONPATH when starting Python?

      BTW, as it happens, my main machine currently has 19 different versions of Python: every major version of vanilla CPython from 2.5 to 3.4b2 in 32-bit and 64-bit flavors, WinPython, pythonxy, ActiveState Python, Anaconda and Canopy. That's not counting a few more custom-built ones, because I can't remember where each of them is so as to count them. And they don't step on each others' toes. Granted, this is on Windows, but if Python can be made to do that there, it can also be made to do the same on Linux.

    25. Re:Offline side-by-side Python by Cramer · · Score: 1

      You've completely missed the part about UNLESS YOU BUILD IT YOURSELF... windows is more or less a "built yourself" installation as there aren't any "system" pythons -- they're going to put stuff where the porter wants it, which is self-contained in 99.9% of the versions I've heard of. The distro provided versions (esp. Redhat) intentionally have common search location(s) that can be a pain to override.

      If you're a python developer, then you'll very likely have numerous local builds without such issues. For common end users, no one is going to go to all the trouble necessary to side-step the system python, or build their own self-contained version. (an app provider might, but I don't know of *any* that do -- outside windows, and many windows python apps simply include a "step 1: install activestate python x.y.z")

    26. Re:Offline side-by-side Python by TheGavster · · Score: 1

      By and large, yes. Red Hat picks a version to baseline for each major RHEL release (4,5,6 ...). So, RHEL6 runs kernel 2.6.32, whether it's 6.0 from 3 years ago or 6.5 that just came out. What they then do is selectively back-port changes from the latest version to create their own special version number: 2.6.32-431, for example.

      While hypothetically they are guaranteeing to protect you from any breaking changes, it makes it an absolute nightmare to guarantee that anything is FIXED. For example, if I am asked "is bug xyz fixed?", I can look in the upstream changelog and see that the bug went away in kernel 3.2, it's very hard to see if that fix made it into Red Hat's version -431. From a stability standpoint, RHEL is wonderful, but from any other, specifically security certification, it's a pit of despair.

      --
      "Because Science" is one step from "Because old book". Try "Because of my experiment testing my falsifiable assertion".
    27. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      You've completely missed the part about UNLESS YOU BUILD IT YOURSELF... windows is more or less a "built yourself" installation as there aren't any "system" pythons

      That's plainly wrong. Go to the download page for Python and look at the MSI downloads - those are your "system" Pythons. They will, in fact, even register themselves in PATH, and add a global registry key aiding any tools in locating the installation directory.

      And yes, Python will use various common search locations by default. But I can't think of any that cannot be overriden via various command line switches and/or environment variables.

      In any case, what's the problem with custom-building Python for your app?

      If you're a python developer, then you'll very likely have numerous local builds without such issues. For common end users, no one is going to go to all the trouble necessary to side-step the system python, or build their own self-contained version. (an app provider might, but I don't know of *any* that do -- outside windows, and many windows python apps simply include a "step 1: install activestate python x.y.z")

      But of course I was talking about the app providers here. The notion that users would set up an isolated Python environment for their app is absurd; that's too much of a burden. But for an enterprise app (which is the kind that would presumably care that much about versioning in the first place), it's a no-brainer, just as they bundle private copies of JRE for Java apps.

      The apps that don't require such stringent support but still want versioning should just use the appropriate shebang, i.e. python2.6 rather than just python2, and reference the appropriate version in the package. Sane distros let you do things like running 2.6 and 2.7 side by side, and symlink them accordingly.

      (an app provider might, but I don't know of *any* that do -- outside windows, and many windows python apps simply include a "step 1: install activestate python x.y.z")

      On Windows, ironically, it's probably the easiest to support system installs, because various Python distros have a standard way of registering themselves for a given version number (in the registry), and startup scripts can then read that registry value and have the full path to python.exe to run for a given X.Y (or lack thereof, at which point they can prompt you to download & install). It's kinda like symlinks on Linux, except that, because on Windows Python installers are provided by Python devs, they work as Python devs intended, and so we can actually rely on that setup being the same on any Windows machine.

    28. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      Why would a Python install break something, if it's installed side by side with your app?

      Wrong question. The right question is Why would you assume that it will not break everything?

      I'll be the judge of whether or not something is going to break. And I'll judge that by spending several weeks doing extensive lab testing before I ever even begin to think about rolling it out to Production systems.

      You know why people aren't upgrading? Because there is no NEED to upgrade for them, and thus no valid reason for spending a ton of time doing testing and verifying it's not going to make all Hell break loose. Just because you wanted to cram option X or feature Y into a software release doesn't mean your customers actually have a need for it.

      If you don't want to break the OS, don't touch /usr at all, it's as simple as that

      HAHAHAHAHAHa ahhh, that's rich. Go get some real life experience and come back in 5 years. Theory and real life aren't always the same, and in fact frequently they are quite a bit different.

    29. Re:Offline side-by-side Python by fnj · · Score: 1

      Well, if you've got RHEL you have support, so you could, like, ASK them. Now, if you've got CentOS, Scientific Linux, et al you can't do that.

    30. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      Wrong question. The right question is Why would you assume that it will not break everything?

      If you're asking that question about Python sitting in its own directory, then you should ask the same question in the app sitting in that same directory. So you'll need to do your extensive lab testing either way, and there won't be any more or less of it regardless of whether app comes with its own private Python interpreter, or uses the system one.

    31. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      You seem to be having trouble understanding the philosophy of "If it isn't broken don't try to fix it."
      Maybe a better way to put it is to defer to Murphy: "If anything possibly can go wrong, it will go wrong, and at the worst possible moment."

      Good IT people follow those philosophies and assume that no matter how unlikely or unforeseen, something somewhere will break horribly. So instead of just rushing out and updating everything willy-nilly, you only update when there's a clear need to do so. And before you do, you perform extensive testing, come up with disaster mitigation plans, verify backups, etc.

      When you're dealing with a production environment there will very often be situations where normal, reasonable assumptions turn out to be wrong. Competent system admins don't assume things are going to work they way they should, because they've seen plenty of situations where the reality is that even though it shouldn't matter, some stupid bullshit somewhere makes it so that it matters a LOT.

    32. Re:Offline side-by-side Python by wolrahnaes · · Score: 1

      You, like many others, are missing the point. Your app can bundle its own version of Python running entirely from within its own folder. The system Python can remain untouched, and other apps will not even know your version is there.

      --
      I used to get high on life, but I developed a tolerance. Now I need something stronger.
    33. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      That's funny, given that the scheme that I am promoting here is all about making it easier to pin versions.

      Python is an app dependency, same as any library or dependent process. The easiest way to manage versions for such is to bundle them with the app and completely isolate it from anything else. That way, you can independently version the app and the system Python, without worrying about one breaking the other - so when some other thing on the system requires a new Python version, your app doesn't break all of a sudden, either. The fewer dependencies, the better.

      Now, as to why you would want to update - at no point did I advocate "updating everything willy nilly". Yes, updates do come at a cost, and yes, you have to retest things. If you are doing things smart, you will contain the updated components such that retesting doesn't have to be system-wide, but at the very minimum your app still needs to be retested. However, updates also have benefits - for new code, especially, as they often make writing it less costly (usually indirectly, because with a new version you can depend on some library that's already well-written and tested, but sometimes directly because of new features in the language itself). Sometimes it's because performance is better in a new version, or because it e.g. is more resilient to some category of errors. In all cases, that benefit has to be evaluated against the cost of retesting to see whether the update makes sense or not; but for most software that is not completely frozen with no further changes made, it will eventually make sense at some point in time - it's just that some apps will benefit from it sooner than others.

      And if you don't keep the need to eventually update in mind, you'll end up like those poor guys stuck on XP and IE6 today.

    34. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      SUSE SuSE Enterprise Server? You, sir, are being somewhat redundant a little bit, sir.

    35. Re:Offline side-by-side Python by MikeBabcock · · Score: 1

      Dial-up.

      --
      - Michael T. Babcock (Yes, I blog)
    36. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      If you want a "if it isn't broke, don't fix it" and avoid anything possibly wrong approach, then minimizing system dependencies and having your own copies with in a directory specific to your program would go a lot farther than making assumptions about what version of what is installed on the system or trying to make and test your app for several different versions of some dependency. You just simply need to get one specific version of every dependency working, then don't touch it, and keep it self contained. No need to risk "breaking" it by "fixing" potential problems from the user not having the right version, or missing some python packages, or touching anything they provide beyond basic system calls.

    37. Re:Offline side-by-side Python by TapeCutter · · Score: 1

      Multiple versions are not a problem on windows, assuming the user is competent with a DOS prompt.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    38. Re:Offline side-by-side Python by dbIII · · Score: 1

      Sadly it's the way to do things with closed source software on linux. If you are not running the software on the exact same distro as the vendor was three years ago the first level telephone monkey will blame your problem on the distro no matter what it is, and you'll never get anywhere near a person that knows how to run the software you are using let alone solve it's problems.

    39. Re:Offline side-by-side Python by dbIII · · Score: 1

      It isn't. The default seems to be "C:/python2.5", "C:/python2.6" etc.
      No DLL hell there.

    40. Re:Offline side-by-side Python by dbIII · · Score: 1

      So? You just install the new python and keep the old one. I've done it many times.
      With the wonderous 1980s technology of library versions the applications can work out what they need and use it.

    41. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      Multiple versions are not a problem on windows, assuming the user is competent with a DOS prompt.

      And Linux is supposedly not ready for desktop because of console 'wizardry'... I LOL at every Microsoft power luser that pride themselves for never having to touch a command line tool.

    42. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      That's plainly wrong. Go to the download page [python.org] for Python and look at the MSI downloads - those are your "system" Pythons.

      Funny, I thought the place to download Windows system software was Windows Update, and not python.org.

    43. Re:Offline side-by-side Python by ThePhilips · · Score: 1

      That is really quirky under RHEL.

      I don't have any experience with Python, but with kernel and glibc, they always keep the original version number and binary compatibility, but backport fixes/features/etc from higher versions.

      That occasionally leads to some amount of confusion when one tries to rely on the version numbers to workaround known bugs or detect supported interfaces.

      --
      All hope abandon ye who enter here.
    44. Re:Offline side-by-side Python by ThePhilips · · Score: 1

      Asking RH to provide something in RHEL I expect would result in them saying "upgrade to RHELn.m" or "it would be only supported in future release RHELn.m".

      I do not have any vast experience to extrapolate - only one minor incident, where we were told that "not available in 5.1, but it would be in the RHEL5.3". IIRC glibc header was missing a definition.

      You also largely miss the point of why the stuff is "not available". Or rather the whole train of thoughts is in wrong direction. The new stuff is not available, because the production server configuration is frozen once it is in production. Even if I had such update from RH, I wouldn't install it in production anyway: risk is simply too high.

      --
      All hope abandon ye who enter here.
    45. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      We don't know.

    46. Re:Offline side-by-side Python by fnj · · Score: 1

      The issue posed by The Gavster, which you completely sidestep, is how do you know what has been backported from later kernel development into RH's version of 2.6.32. My answer pointed out that if you are running RHEL, you have paid for RHEL support, so just ask them already (or read the release documents if your are bashful - they are extremely thorough).

      Obsiously the RH response in any given case (as you allude to) is going to be either:
      1) Yeah, that made it into 5.x already, or
      2) Yeah, that's not there yet but will be in 5.y, or
      3) Yeah, we can send you a patch for that and you can compile the kernel SRPM, or
      3) Sorry, there are no present plans to ever put that in 5.

      So your point in the last paragraph is ... ?

    47. Re:Offline side-by-side Python by ThePhilips · · Score: 1

      So your point in the last paragraph is ... ?

      I'm not sidestepping anything. The point is that RH will NOT do half of what you suggest. Customers will NOT want most of it too.

      The "new features" are often desired by developers, not the customers.

      The whole point of RHEL (and the commercial *NIX systems) is to support the long running systems (think 5-10-more years). They are not test beds for new fancy shit. (For that you have Fedora/etc.) They are for production systems, with support options optimized not for developers/ISVs, but for the customers actually running the software. And why would ever customer care what version of Python is installed on their production servers?

      This is totally different market where developer who says "we want that and this" does not survive for very long. (That is typical talk of the bug multi-nationals, their usual lack of flexibility and the reason why they eventually disappear.) What normally happens is the reverse: developer asks "what you run? OK, that would cost you that much."

      --
      All hope abandon ye who enter here.
    48. Re:Offline side-by-side Python by infosinger · · Score: 1

      We have about 10 years worth of tools in our development environment and we have 2.5, 2.6 and multiple 2.7 installations of Python. This is one of those deals that the old tools aren't broken and we have more important things to do than upgrade/test on the new Python. Not a very satisfying situation but we want to prioritize our 60-70 hour work week appropriately.

    49. Re:Offline side-by-side Python by JBdH · · Score: 1

      No shell scripts needed: virtualenv

    50. Re:Offline side-by-side Python by Karzz1 · · Score: 1

      If you swapped out the Python that came with the system with a new, incompatible Python, chances are good that it break so hard it wouldn't even be able to boot up.

      I had an arrogant developer who did just that on a RHEL6 system. He stomped* on the system python (/usr) with python 3.X.
      This effectively broke most of the package management ( yum was completely screwed) along with a ton of system tools.

      * he installed from source over top of the system RPM files rather than just put his version of python somewhere out of the way like /opt or /usr/local. He did not uninstall the rpms ( he realistically couldn't ) so he grabbed a bigger hammer. Dumb ass.

      --
      Beware of he who would deny you access to information, for in his heart he dreams himself your master.
    51. Re:Offline side-by-side Python by halltk1983 · · Score: 1

      That'll do wonders for security.

      --
      Watch for Penguins, they eat Apples and throw rocks at Windows.
    52. Re:Offline side-by-side Python by Karzz1 · · Score: 1

      3) Yeah, we can send you a patch for that and you can compile the kernel SRPM, or

      RH does not support custom compiled kernels. Basically, if you compile your own kernel there is no reason to use RH because you have just "voided your warranty" and the whole system is considered suspect.

      --
      Beware of he who would deny you access to information, for in his heart he dreams himself your master.
    53. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      "BTW, as it happens, my main machine currently has 19 different versions of Python: every major version of vanilla CPython from 2.5 to 3.4b2 in 32-bit and 64-bit flavors, WinPython, pythonxy, ActiveState Python, Anaconda and Canopy."

      And having 19 different versions is something that is acceptable to you? That is fucking ridiculous.

    54. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      You are missing the point in that having x number of applications install x number of python installs is fucking ridiculous unacceptable horseshit.

      Having 20 something installs of python in various application folders, all or some of which is duplicate code is not in any way acceptable.

    55. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      This will make you as an app developer responsible for the security of the entire bundle, meaning that you'll have to ship updates when Python gets a patch for some exploit. Whether the price is worth the benefit of having your own self-contained little universe of dependencies or not depends on what exactly your level of support commitment is, and what the app generally does.

    56. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      "system" here means system-wide, not shipping with the system.

    57. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      I have 19 different versions not because I need them to run apps, but because I'm a developer of a Python IDE that has to support all those versions.

      Needless to say, I have a stake in this discussion, since people moving to 2.7 and abandoning 2.5/2.6 in droves would mean there's fewer versions for me to support. :)

    58. Re:Offline side-by-side Python by halltk1983 · · Score: 1

      If you allow developers to manage system security, you deserve the compromises you're going to get. You should have people trained in maintaining security maintaining your security. Especially in bigger organizations.

      --
      Watch for Penguins, they eat Apples and throw rocks at Windows.
    59. Re:Offline side-by-side Python by shutdown+-p+now · · Score: 1

      You don't allow developers to manage system security, naturally. They are managing their own app security. It is still subject to overall system security (e.g. if a developer says that his /opt/foo must be writable, you tell him to get the fuck out and fix that).

    60. Re:Offline side-by-side Python by RabidReindeer · · Score: 1

      ... but we want to prioritize our 60-70 hour work week appropriately.

      Ah. Management brags about how they get so much productivity with so few people for so little cost.

      I do hope you've got your résumé current for when the dam finally breaks. If management was really as smart as they thought they are, a couple of junior people would be working on trying to migrate. But then they'd also have heard that the longer you work, the more things start breaking.

      Incidentally, although I still prefer Perl for regex-based quick-and-dirty, a lot of my lightweight utilities that used to be in Perl are now in Python.

      They were pulling in CPAN modules, and as often as not, the modules wouldn't build at some point. CPAN modules typically include C code that is extremely sensitive to changes in the C compiler environment and the OS.

      I have a lot less grief from the python modules.

    61. Re:Offline side-by-side Python by Anonymous Coward · · Score: 0

      It's a quick way to break Yum as well. I might have done that once.

  10. The flip side... by MetalliQaZ · · Score: 1

    Maybe users don't want to upgrade, like Mr. Froyd says. But maybe they would upgrade if you gave them a reason to. I'm definitely not a large scale user, but I've never encountered a situation where an older version is more attractive in any way.

    --
    "Here Lies Philip J. Fry, named for his uncle, to carry on his spirit"
    1. Re:The flip side... by sconeu · · Score: 4, Funny

      but I've never encountered a situation where an older version is more attractive in any way

      Windows 8 says hello.

      --
      General Relativity: Space-time tells matter where to go; Matter tells space-time what shape to be.
    2. Re:The flip side... by Anonymous Coward · · Score: 0

      After each Firefox release one has to spend time looking for extensions and hacks for restoring the functionality that previous verion had. So nowadays FF upgrade is quite unattractive from productivity point of view.

    3. Re:The flip side... by cold+fjord · · Score: 1

      Windows 8 says hello.

      Greetings to you, O Dark Overlord of the Underworld!
      From whence dark shadow hast thou cometh?
      Has the hour arrived when my infernal device is to be taken by thy power?
      To render me destitute and afflicted?
      Oh! Such agony!
      Alas!
      Alas!

      --
      much of left-wing thought is a kind of playing with fire by people who don't even know that fire is hot - George Orwell
    4. Re:The flip side... by Anonymous Coward · · Score: 0

      Here you go. GTK 2.90.6 -> 2.90.7 removed the directfb rendering target, which had been pretty usable.

  11. Hahahahaha by Anonymous Coward · · Score: 0

    ROTFLMAO.
    Python thinks just because they declare EOL on 2.6 that millions of users around the world are going to jump to 2.7?
    Can they guarantee that 2.7 is bug-for-bug compatible with 2.6? That everything in 2.6 is still in 2.7? Can you honestly see a Wall Street bank, a top-tier cancer hospital, or a world-class university blindly update to the newer version just cuz Python Project said so? And risk their systems _just_ _not_ _working_?
    No? I didn't think so.

  12. Umm...Maybe... by Anonymous Coward · · Score: 0

    ...because we don't want to rewrite all our software?

    In today's lesson, we learn why it's generally considered a bad move to do a "clean break" upgrade in a FOSS project.

    Corporations can get away with forcing developers and customers to upgrade (Apple does it all the time), but that's usually risky. Microsoft has been known to actually put bugs back into their OS in order to ensure compatibility.

    FOSS projects can't get away with it. We have a whole set of infrastructure scripts written in Python that would need a pretty major overhaul to go Python 3. I think that they all run in 2.4 (I'll have to check).

    If it gets to the point that we can't run them anymore, then we'll have to rewrite them.

    In something other than Python.

  13. Not surprising by redmid17 · · Score: 3, Insightful
    TFA: ""I think this list of reasons to upgrade misses the larger point in providing software for other people: You do not get to tell your users what to do. ... Maybe those users don’t have sufficient control over their working environments to install a new version of Python. ... Maybe those users rely on certain APIs only available in older versions of Python and don’t wish to take an indeterminate amount of time to rewrite (retest, recertify, etc. etc.) their software. ... Maybe those users are just rationally lazy and don’t want to deal with downloading, configuring, and installing a new version of Python, plus dealing with inevitable fallout, when the old version has worked Just Fine for everything else."

    I'm just going to mirror what this guy said. There's a reason why IE6 was still around *years* after it should have been taken out back and shot. There's a lot of money dumped into these project and applications. I'd make every effort to encourage a transition, but those cost money and time.

  14. Ubuntu and Windows by tepples · · Score: 1

    RHEL/CentOS isn't the only problem. There are versions of Ubuntu Server still in long-term support that still ship with outdated Python, such as Ubuntu 10.04 LTS that ships with Python 2.6. Another is the fact that some Python libraries use C modules (as opposed to using pure-Python code that uses ctypes to interact with shared libraries), and some users under Windows may not own a copy of the appropriate version of Visual Studio to recompile the module. For a long time, the official binaries of the MySQL database client module for Python for Windows didn't support anything newer than 2.5.

    1. Re:Ubuntu and Windows by shutdown+-p+now · · Score: 2

      Another is the fact that some Python libraries use C modules (as opposed to using pure-Python code that uses ctypes to interact with shared libraries), and some users under Windows may not own a copy of the appropriate version of Visual Studio to recompile the module.

      This particular aspect actually makes it easier to use more recent Python versions on Windows, not the other way around. Case in point: if you use 3.3, then your C extensions have to be built with VS 2010 compiler. If you use 2.7, they have to be built with VS 2008. Now, VC++ 2010 Express is still available as a download, and works just fine so long as you don't need to build 64-bit binaries. VC++ 2008 Express is also available, but only as a direct download link; the landing page (with the information about the file, "Download" button etc) is gone - you need to know where it is, or google for it to find it. And previous Python versions require VS 2005, which is even harder to obtain.

      It's actually quite a headache in practice, because 2.7 is still more widely used, and people do keep running into problems trying to easy_install or pip install binary packages and getting those compile errors, and don't know where to go get the compiler.

  15. Incompatibility by FedeTXF · · Score: 1

    New Python versions come with incompatible changes. Very rarely you can grab code written for one version and run it completely unmodified on a newer version. This sucks and is made worse by third party APIs that also have to be modified.

    It is hard to release new language versions and also keeping backward compatibility. Some languages do it better than others.

  16. Simple by Registered+Coward+v2 · · Score: 2

    If it ain't broke don't fix it. I've run into that where a developer hoes to a new version of something and as a result what used to work fine now has problems. When the developer says 'I can fix that...' I tell them just to roll it back. Unless there is some new feature that makes upgrading useful there is no reason to run the risk of problems. Users don't care about the underlying technology as long as it gets the job done with a minimum of fuss.

    --
    I'm a consultant - I convert gibberish into cash-flow.
    1. Re:Simple by satuon · · Score: 1

      One of my colleagues migrated his project from Qt4 to Qt5, because he just couldn't live with the thought of using an older version while the newer one had been released for 6 months already.

      So far only headaches, time wasted migrating, time wasted fixing bugs, and I still haven't seen anything good come out of it. Now when I reporting a bug introduced in Qt5 to my colleague, I preface it with "Qt5 strikes again."

  17. Turn the question in the right direction by Meeni · · Score: 5, Insightful

    Why doesn't the new version of Python interpreter support older dialects ?

    1. Re:Turn the question in the right direction by Anonymous Coward · · Score: 0

      don't ask the obvious - that would be asking too much of these panty waisted foot-tapping metrosexual urban Euro-worshipping geeks in this crowd

    2. Re:Turn the question in the right direction by umafuckit · · Score: 2

      Why doesn't the new version of Python interpreter support older dialects ?

      Not justifying it, but possibly it's to keep the code as homogenous as possible in the aid of readability. Like with the identing, Python likes to force you to do things its way, and its way is the only way. :)

    3. Re:Turn the question in the right direction by H0p313ss · · Score: 2

      Why doesn't the new version of Python interpreter support older dialects ?

      Bingo.

      Why has Microsoft dominates so much for so long? Backwards compatibility.

      (Not the only reason, but a arguably the big one that nobody can compete with.)

      (One day you'll get your day in the sun WINE...)

      --
      XML is a known as a key material required to create SMD: Software of Mass Destruction
    4. Re:Turn the question in the right direction by shutdown+-p+now · · Score: 4, Informative

      If we're talking about 2.4/5/6 -> 2.7 migration, then the question does not apply, because there's no "older dialect" - it's the same language, albeit with a few minor additions. There are no major breaking changes there. The problem is that you can't be sure that any of the minor changes do not somehow break your program, especially if it relies on something that was never a hard guarantee, and so you need to retest on the new Python version before you can officially declare it supported. This is no different from Java, for example.

      If we're talking about 2.x -> 3.x, then the break is by design. Python 3 is simply a new language, which disposes with a lot of cruft that accumulated over the years in Python 2 (remember, we're talking about something that's 20 years old at this point). It makes it much better for writing new code, but also requires that you port old code, and places an additional burden on library developers to support both (at least for as long as 2.x remains popular).

    5. Re:Turn the question in the right direction by thetoadwarrior · · Score: 1

      And it's possibly the main reason or at least one of the reasons Windows provides such a poor experience compared to everything else.

    6. Re:Turn the question in the right direction by Darinbob · · Score: 1

      Laziness? Lack of respect for users? Not understanding who the users actually are and what they do? Younger devs who've never dealt with backwards compatibility nightmares before?

    7. Re:Turn the question in the right direction by phorm · · Score: 1

      Like my XP soundcards that don't work in Vista/7? My Vista devices that don't work in win8?
      How about programs that require .NET [insert non-latest version here]?

    8. Re:Turn the question in the right direction by sjames · · Score: 1

      I have found that it generally does, with no issue.

    9. Re:Turn the question in the right direction by H0p313ss · · Score: 1

      Like my XP soundcards that don't work in Vista/7? My Vista devices that don't work in win8?
      How about programs that require .NET [insert non-latest version here]?

      Your hardware problems are probably caused by vendors who never updated drivers. (And yes, the driver model did change, but that's not supposed to be end user software.) I've hit more than one of these myself, my 10 year old Epson scanner ceased to be useful after I moved to Win 7.

      .NET is an interesting case, I think the best phrase to apply here would be "screwing the pooch". Now whether that should be applied to Microsoft for shipping it in the first place, software vendors for adopting it or end-users who can't figure out how to install a runtime without written instructions is a whole other debate.

      --
      XML is a known as a key material required to create SMD: Software of Mass Destruction
    10. Re:Turn the question in the right direction by H0p313ss · · Score: 1

      And it's possibly the main reason or at least one of the reasons Windows provides such a poor experience compared to everything else.

      Yes and no... Sure Vista and Win 8 have been relative trainwrecks, but Windows 7 is possibly the best consumer OS out there.

      (I've been using OSX daily for three years now and I still think half the UI is ass-backwards... )

      --
      XML is a known as a key material required to create SMD: Software of Mass Destruction
    11. Re:Turn the question in the right direction by thetoadwarrior · · Score: 1

      Windows 7 does stupid things like fails to delete all the files I've selected. It doesn't say why, the pop-up just goes away as expected and silently something fails. But of course because Windows is poor at refreshing the gui, do I see a file because it's not refresh or it's not deleted?

      My work machine is a win 7 8 core 16gb machine with a decent graphics card (we do GIS work and render large datasets so I get a nice card) and it's still the slower to boot and and all around slower than my Linux laptop and macbook.

      Slow network drives bring absolutely everything to a halt (even when right-clicking a file on the desktop) and ironically takes forever to timeout where as the "files that don't end up getting deleted" issue I mentioned first, I suspect is a timeout issue and it's quite quick.

      Windows seems to just naturally build up a metric fuck-ton of temp files and log files that don't like to go away which is probably one of the reasons it ends up being slower. Not to mention the registry just seems to be a dumping ground where you can sling anything and unfortunately you're luck if half of it gets removed when you uninstall. This is probably the reason Windows pretty much requires a fresh install every so often. Performance just degrades over time.

      It's still the worst OS for uptime. I like to keep my machine at work on all the time because of the stupid anti-virus schedule that means if I don't, I have to fight against the virus scan first thing in the morning and for half the day which makes things worse.

      As a whole it works good enough but in a lot of ways it's not improved since windows 95.

      Don't get me wrong, Windows 7 is certainly the nicest version of Windows but it has a lot of things like I mentioned that never go away. I would assume that's because there's so much code in there to make the thing backwards compatible that they just can't fix those problems so they end up doing something like Metro as an improvement in Windows 8 rather than a lot of less visible things that would improve the experience.

    12. Re:Turn the question in the right direction by narcc · · Score: 1

      Python 3 is simply a new language, which disposes with a lot of cruft that accumulated over the years in Python 2 (remember, we're talking about something that's 20 years old at this point).

      Odd, that doesn't seem to have been a problem for many much older languages.

      Then again, it's Python. Where design is concerned, it makes PHP look like lisp.

    13. Re:Turn the question in the right direction by shutdown+-p+now · · Score: 2

      Odd, that doesn't seem to have been a problem for many much older languages.

      What, the accumulation of cruft? It has been a problem for all much older languages that are still being actively used, but especially those that are also actively evolving. Java is piles upon piles of cruft at this point, for example. PHP, even more so. C++, don't even get me started on that. C doesn't have that much, but only because it's a much smaller language in general; proportionally, it has just as much cruft as anyone else (think "register" and "auto").

      And yes, those languages do in fact break things to get rid of such cruft. Even C does - for example, "const x = 123" is legal C89 but illegal C99. And people bitched about those kinds of things, too.

      And, of course, there is no shortage of attempts to do a "clean break" with C and/or C++, while preserving the worthwhile things. D is a very prominent example of that line of thinking. It just so happens that, in the case of Python, the people who decided that a clean break was in order were the same ones who created the original.

      Then again, it's Python. Where design is concerned, it makes PHP look like lisp.

      Care to be more specific?

    14. Re:Turn the question in the right direction by Anonymous Coward · · Score: 0

      Python is bloody slow. Code executes at something like 100x slower than C++. Java and C# are just 2-5x slower.

      I don't know why anyone would use Python for production code, ever. The author even says he wrote it for hacking around, not for major projects.

    15. Re:Turn the question in the right direction by narcc · · Score: 1

      Care to be more specific?

      It's not worth it. I've learned to never argue with a zealot.

    16. Re:Turn the question in the right direction by Xylantiel · · Score: 1

      2.4/5/6/7 are more different than you might think. Some of the things that were "added" were already there in a preliminary form and therefore had their names and interfaces changed.

    17. Re:Turn the question in the right direction by phantomfive · · Score: 1

      Like my XP soundcards that don't work in Vista/7? My Vista devices that don't work in win8? How about programs that require .NET [insert non-latest version here]?

      Those are all extremely annoying situations, wouldn't you agree?

      --
      "First they came for the slanderers and i said nothing."
    18. Re:Turn the question in the right direction by swilver · · Score: 1

      Add one extra line at the top of a python script, identifying which "dialect" it is. If it's not there... then its 2.6. I know shell scripts already have a mechanism for that, but it kinda breaks down when new incompatible interpreters insist on using the same name.

    19. Re:Turn the question in the right direction by shutdown+-p+now · · Score: 1

      It's sort of funny coming from you, given that you have been preaching anti-OOP orthodoxy hereabouts for years. But no, I'm not a zealot. I don't consider Python perfect or ideal, just reasonably good. At the very least, certainly better than PHP.

    20. Re:Turn the question in the right direction by shutdown+-p+now · · Score: 1

      Well, if you depend on some feature that was documented as experimental/unstable, then it would stand to reason that future versions will likely break that, but is it really the fault of the language of the implementation? Obviously, new Python versions are going to have new features, and to test those features they are going to ship as experimental in some release and then be promoted to stable in some other release; understanding that mechanism is expected of developers who use the language.

      I mean, at some extreme, one might ask why Python 2.7 isn't backwards compatible in the face of something like:

      if sys.version_info > (2,6): raise Exception()

      but surely that is not reasonable.

      (Though, ironically, Windows 8.1 has started to lie about its version when asked via GetVersionEx precisely for this reason - so apparently it is reasonable for some...)

    21. Re:Turn the question in the right direction by narcc · · Score: 2

      I don't consider Python perfect or ideal,

      I can agree with that.

      just reasonably good. At the very least, certainly better than PHP.

      Not that. PHP's only real problems are inconsistent naming and parameter order. (Interestingly enough, a problem partially shared by python in spite of PEP 8) Unlike Python, it doesn't suffer from any serious design flaws.

      Here's an example that you're undoubtedly tired of hearing about: Meaningful white space. It looks like just a matter of personal preference at first, but has far-reaching consequences. I've mentioned in the past how it makes some editors unusable and it makes moving code from one indentation level to another (even with a good python-aware editor) a crap-shoot. But those are just the problems you'll find on the surface. The consequences of that seemingly harmless decision don't end there. Look at the absurd problems that decision has caused to lambdas! (Problems, I will note, that are not shared by PHP.)

      I call a problem like that serious or 'deep' because it cannot be fixed without making a dramatic change to the language or introducing a major inconsistency in to the language.

      I don't mention problems like scoping, as those just show a lack of planning -- not necessarily a major issue with the language's design. Python got crufty so much more quickly than other languages because its design wasn't well-planned from the start, leading to lots of strange problems and ad-hock solutions over the years. GvR appears to have committed Brown's first deadly sin of compiler writing: to code before you think.

      Javascript, in contrast, is nearly 20 years old and has not accumulated much, if any, cruft. It's actually improved. (Though it looks like it's about to start accumulating some cruft...) Its major problems (i.e. new and constructor functions) were there from the start (due to external pressure) and they exist as problems because they stand in direct opposition to an otherwise clear, consistent, and simple design.

    22. Re:Turn the question in the right direction by tuffy · · Score: 3, Informative

      Not that. PHP's only real problems are inconsistent naming and parameter order. (Interestingly enough, a problem partially shared by python in spite of PEP 8) Unlike Python, it doesn't suffer from any serious design flaws.

      Is this some kind of joke? Python's use of syntactically-significant whitespace is not in the same league as all the issues PHP has.

      --

      Ita erat quando hic adveni.

    23. Re:Turn the question in the right direction by qubezz · · Score: 1

      The Vista+ driver break for everything you use (I have a printer, scanner, several joysticks, etc that are hosed in post-XP OSs) was solely to lock down your computer so you can't use it. The driver model was changed for DRM, HDCP, Macromedia etc, so that video and sound is encrypted all the way from media to screen and speakers. New drivers required for everything; we wouldn't want you recording digital sound that we don't allow...

    24. Re:Turn the question in the right direction by narcc · · Score: 1

      Yeah, that link is popular -- but it's mostly nonsense.

    25. Re:Turn the question in the right direction by flok · · Score: 1

      I like the excellent arguments that you wrote to support your stand.

      --

      www.vanheusden.com - home of Multitail, HTTPing, CoffeeSaint, EntropyBroker, rsstail, bsod, listener, nagcon, nagi
    26. Re:Turn the question in the right direction by Anonymous Coward · · Score: 0

      They they should have something like namespaces but for 2.x fallback, so 3.x and 2.x codebase can be mixed and executed together. There's no need to have two Pythons, it hurts the adoption of language.

    27. Re:Turn the question in the right direction by shutdown+-p+now · · Score: 1

      This would require a lot of work. We're not just talking about a few odd keywords or syntactic changes here, but a reworked base type hierarchy, quite a few additions and renames and semantic changes to clean up the old cruft etc - not just in global functions, but also methods. It would basically mean that every single standard library type would have to somehow figure out whether it is called from 2.x or 3.x code, and alter its behavior accordingly. Even then that would carry a tax on pure 3.x code.

      What hurts the adoption of the language is that they've stopped developing 2.x too early, and several small changes that make it easier to write code that targets both were added relatively late (in 3.3).

  18. Rhel 5 by silas_moeckel · · Score: 1

    Still ships with 2.4

    Rhel 6 not much newer.

    Lot of us with lots of production boxes want stable and fight to keep it that way. There is also the library issue many have not ported to 3.x or made major we broke things changes to do so.

    --
    No sir I dont like it.
  19. Because Python 3 still needs work by Ichijo · · Score: 2

    Python 3.x has no relation to Windows Unicode filename support... Also, Python 3.x has proven significantly slower in almost all benchmarks that matter to us, especially start-up time.

    (source)

    --
    Any sufficiently unpopular but cohesive argument is indistinguishable from trolling.
  20. First try 2.4 to 2.7 by tepples · · Score: 2

    You could try porting your 2.4 scripts to 2.7, justifying it to your boss as a security measure to stay on a version of Python that will remain supported for the foreseeable future. That should involve very little change to your code. Then gradually shift the program to use those parts of Python 3 syntax that Python 2.7 supports through from __future__ statements, such as Unicode strings, print() as a function, and the like.

    1. Re:First try 2.4 to 2.7 by thogard · · Score: 2

      We have a few applications written in zope. Zope was one of those classical python programs that needs a very specific set of libraries for each version of zope. Some of the required versions aren't even on the net any more according to google. At some point the Zope team split up and now the new zope won't do most of what the old zope was doing and the old zope has bugs and is a security risk and is now abandon-ware . So far we have hired 3 different python coders to "fix" the old applications yet none of them ever finished the job before moving on to other things. The odd thing is one of the zope applications was written in about a week the first time. So far our maintenance costs on it are about 1000% the development cost. That is the worst example, but the problem is endemic in the python community since nothing is every finished, everything is in a state of flux and your long term support options are based purely on some python coder not getting board and moving on to the new shiny stuff.

    2. Re:First try 2.4 to 2.7 by Anonymous Coward · · Score: 0

      You could try porting your 2.4 scripts to 2.7, justifying it to your boss as a security measure to stay on a version of Python that will remain supported for the foreseeable future. That should involve very little change to your code. Then gradually shift the program to use those parts of Python 3 syntax that Python 2.7 supports through from __future__ statements, such as Unicode strings, print() as a function, and the like.

      You totally miss the point there - he said their scripts work now, on python 2.4. As long as he has 2.4 available (or if it's what came with the OS release) why would he want to mess with what *works fine*??

      Sorry, been a Sysadmin for 28 years, everything from old 68K Sun/Apollo workstations, proprietary minicomputers, to modern PC servers with 64-cores or whatnot... and my rule of thumb has always been "if it works, don't fsck with it". I've seen way too much critical production stuff get broken by weenies who decide they want to install (in this case) "the latest python, because what's there is old" - only to find themselves faced with the ire of management, and if not *fired* for breaking stuff (seen that - when the system is *making you money* - e-commerce, etc - downtime=lost profit$) spends lots of time (and time=money) fixing it while other people in the company that rely on said system can't do their work (again, time=money)... so, pretty much, if you have *any* doubts as to what might break by your actions, *don't* do it - if you value getting a paycheck that is.

    3. Re:First try 2.4 to 2.7 by EvanED · · Score: 1

      ...why would he want to mess with what *works fine*??

      Because it didn't "work fine." They were doing things like debugging then working around Python bugs that are fixed in later versions.

    4. Re:First try 2.4 to 2.7 by Ambassador+Kosh · · Score: 1

      Zope 2.x continues to be updated and maintained. It was zope 3.x which was abandoned. You can go to https://pypi.python.org/pypi/Zope2/2.13.21 and download the latest version of zope. It was even discussed to rename zope 2.x to zope 4.x but that was dropped since they thought it would be even more confusing. Zope 2.x has also run on the python 2.7 for a very long time now and so far I have upgraded apps written in zope 2.0 all the way up through 2.13 over the years with very few problems.

      --
      Computer modeling for biotech drug manufacturing is HARD! :)
    5. Re:First try 2.4 to 2.7 by thogard · · Score: 1

      The current Zope apps won't move to the newest version of Zope 2.x and there is seems to be no path from Zope 2.5.1 to the newer version while still allowing the existing code to function. There are major stumbling blocks from the days of the Zope 2/3 split and I suspect that code from before that is simply unmaintainable with any sort of reasonable budget. Our solution was to build an application firewall around the old code base and run it on its own isolated system. I'm open to having someone else try to move this to the modern era.

      My concern is that I see this happening with all of our python based development projects as some coder imports a convenient library but that library is full of bugs or later fails to keep up with the new versions, we get locked into a maintenance nightmare. We don't see that nearly so much with C, perl or .net code. We don't see it at all on our embedded C / assembly projects. We did have the same problems in the past with DLLs and Borland C based packages.

    6. Re:First try 2.4 to 2.7 by tepples · · Score: 1

      As long as he has 2.4 available (or if it's what came with the OS release) why would he want to mess with what *works fine*??

      Because 2.4 is no longer maintained by PSF, which means PSF isn't going to provide security fixes.

    7. Re:First try 2.4 to 2.7 by Anonymous Coward · · Score: 0

      And if he has no security problems that he needs 'fixes' for, and it works fine on 2.4, so in essence he really doesn't need or care if it's "maintained by PSF", why upgrade?

    8. Re:First try 2.4 to 2.7 by Ambassador+Kosh · · Score: 1

      I wonder why you can't migrate stuff from Zope 2.5.1 to newer versions? I started with applications from Zope 2.0 and migrated them step by step to 2.1, 2.2, 2.3 etc up through 2.13 and each step was usually a few hours of work or less.

      --
      Computer modeling for biotech drug manufacturing is HARD! :)
    9. Re:First try 2.4 to 2.7 by thogard · · Score: 1

      As I stated before. The chain of Zope that knows how to update the database is based on libraries that simply do not exist online.

    10. Re:First try 2.4 to 2.7 by Ambassador+Kosh · · Score: 1

      However if those libraries are already installed on your system it should be fairly easy to update them. For zope 2.x the changes in python product code have been fairly minimal across all versions and the python changes from 1.5 to 2.7 are pretty easy to change also. The only big issue I can see is if the system used zclasses and I thought that could still be installed in a modern zope version, just heavily recommended against. However zclasses are normally fairly easy to rebuild as a pure python product.

      --
      Computer modeling for biotech drug manufacturing is HARD! :)
  21. Why? by Anonymous Coward · · Score: 0

    Why not?

  22. Legacy Support by pubwvj · · Score: 1

    Because some people can't upgrade to the latest and greatest for a variety of reasons. Tone down your arrogance - its messing up your nose hair.

  23. Unit tests by tepples · · Score: 1

    It's possible to update without updating blindly. If the 2.5/2.6 version still passes unit tests and the most critical acceptance tests under 2.7, then perhaps 2.7 can be rolled out across part of the company at a time, using each division as an acceptance test for the next.

    1. Re:Unit tests by fyngyrz · · Score: 1

      ...which would be a huge PITA, for no particular reason that I can think of.

      If it isn't broken -- don't "fix" it.

      There's a world of difference between people who do real work for real money and where things operating or not have consequences, and some abstract idea of "it'd be 'nice' to have the newest stuff." The latter is of no consequence; the former means everything to everyone.

      --
      I've fallen off your lawn, and I can't get up.
    2. Re:Unit tests by tepples · · Score: 1

      When the old versions are no longer supported by PSF, no security patches are forthcoming from PSF.

    3. Re:Unit tests by fyngyrz · · Score: 1

      Security patches to scripting languages are almost always 100% irrelevant unless you're writing for WAN-facing machines with exposed services. I'm trying to figure out the odds of a deep excursion of the northern polar auroral oval at the desktop, not keep Joe Scriptkiddie from entering Robert');Drop Table Customers; -- into a CGI form.

      --
      I've fallen off your lawn, and I can't get up.
  24. It's because Python 3 is broken. by Effugas · · Score: 2

    No really.

    I took a pass at Python 3 a while back. The amount of hoops I needed to jump through, to deal with compilation errors around Unicode handling, was terrifying. It was simply a poor user experience.

    Python 2.7 just works. Sure, it's a nightmare past a certain scale point. But until you get into the dregs of OO it really is executable pseudocode.

    Python 3 is some other language that lost that property.

    The big problem is that we don't ship languages with telemetry that reports when they fail to work. So things that are completely obvious to outsiders never make it to inner circles. Not that I can really see any way for Python 3 to mend its errors.

    1. Re:It's because Python 3 is broken. by nicolastheadept · · Score: 1

      The question was never why not upgrade to Python 3. It was about why not stop supporting EOL versions of Python prior to 2.7

      --
      09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
    2. Re:It's because Python 3 is broken. by Anonymous Coward · · Score: 2, Insightful

      No really.

      I took a pass at Python 3 a while back. The amount of hoops I needed to jump through, to deal with compilation errors around Unicode handling, was terrifying. It was simply a poor user experience.

      That doesn't necessarily mean Python 3 is broken.

      Lots of Python developers are discovering that they don't really understand how to do Unicode properly. Their code works under Python 2 (mostly by accident), but Python 3 calls BS and forces you to do it right.

    3. Re:It's because Python 3 is broken. by shutdown+-p+now · · Score: 2

      The amount of hoops I needed to jump through, to deal with compilation errors around Unicode handling, was terrifying. It was simply a poor user experience.

      That often (though not always) indicates that the original codebase is written without much if any awareness of the existence of different text encodings, and will therefore handle anything other than ASCII or Latin-1 (or, if you're really lucky, UTF-8) wrong. Exposing that is a good thing. The whole point of changes around strings in Python 3 was to explicitly expose the various assumptions centered around "text is just a bunch of bytes" and "a bunch of bytes is always meaningful texts" (like "every byte is a character") as wrong.

    4. Re:It's because Python 3 is broken. by Anonymous Coward · · Score: 0

      This....

      Came here hoping someone else shared my viewpoint on this issue....

      Might not have been so bad if they didn't cripple two nice features....

      print a
      No shift key needed, no sore pinky fingers. Now they want print(a). Bah.

      print "Hello %s" % name
      Now it's some stupid thing that requires me to call a "format()" function?!?!? I can always remember using % but I have to go google how to do it in python3 every time.

      Lots of useful code for doing network coding is in 2.x because of the asn.1 library and friends are just lacking on 3.x.

        Python3 is not helping me to do anything other than give up two nice shorthand things I used every day in python 2.x

    5. Re:It's because Python 3 is broken. by dkf · · Score: 1

      The big problem is that we don't ship languages with telemetry that reports when they fail to work.

      If you ever get that sort of thing turned on, you'll get a shitstorm of people complaining about how you're doing the work of the NSA/stealing their commercial ideas/etc. Yes, it does mean that you can't see the problems directly, but you've got to put up with it.

      And telemetry probably wouldn't help you detect the case where someone is trying to do something and failing because they can't figure out where to begin. Those are some of the cases that you really want to catch; merely seeing what exceptions get thrown (or something like that) is nothing like as useful.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    6. Re:It's because Python 3 is broken. by Anonymous Coward · · Score: 0

      The problem is that they broke strings being used for sequences of bytes that shouldn't be interpreted as text. The result is that the most significant and worthwhile application written in Python (Mercurial) is too painful to be worth porting to 3.x. Big fail.

    7. Re:It's because Python 3 is broken. by shutdown+-p+now · · Score: 1

      The problem is that they broke strings being used for sequences of bytes that shouldn't be interpreted as text.

      Why is it a problem, exactly? If you have a sequence of bytes that is not to be interpreted as text, then it's not a string, so why would you want to represent it as a string? Python 3.x has "bytes" type for that exact purpose (indeed, under the hood, it's actually the same as 2.7 "str" representation-wise).

    8. Re:It's because Python 3 is broken. by spitzak · · Score: 1

      It you have a sequence of bytes that is not to be interpreted as text, then it's not a string

      No, it is too a string. It may even be 99.99999% valid UTF-8 encodings of "characters". I do not want the fact that a single byte is wrong to break my code, which does not interpret the contents of the string at all, except maybe to look for spaces. And I may require this, for instance if I want to write a program that finds and renames all files with invalid UTF-8 in their filenames. That can't be done if the api to name files will throw a goddamn exception when I give it an invalid name!

      Somehow Unicode turns otherwise intelligent people like you into drooling morons. Think a little. Think about "words" for instance: software has been copying "words" without mangling them or splitting them and even doing complex operations such as arranging them into justified paragraphs or comparing them to other "words", despite the horrible fact that that software fails to spell-check the words! Why, that should be impossible!

      Python 3's handling of strings is broken. Sorry.

    9. Re:It's because Python 3 is broken. by spitzak · · Score: 1

      It does seem to me the python parser could treat the expression "AB" as "A(B)". Then "print a" would turn into "print(a)" and 'print "Hello %s"%name"' would turn into 'print("Hello %s"%name)' (note you don't need to call format()).

      It also would mean that you could type "help foo" instead of "help(foo)" and probably a lot of other useful things.

      Not sure if this would violate some existing valid syntax of Python, and there probably are details missing (one obvious one is that "A (B)" should not turn into "A((B))". But it does seem like a valid idea and it would be much more back-compatible.

  25. Because it costs money... by Anonymous Coward · · Score: 2, Insightful

    Also, to be realistic, you don't earn any money upgrading your existing software to the latest platform.

  26. There is no point? by viperidaenz · · Score: 1

    If you don't require features from Python 2.7, why drop support for older version?

    1. Re:There is no point? by shutdown+-p+now · · Score: 1

      Because the older version can have bugs, and those bugs will never be fixed at this point as it is EOL'd?

    2. Re:There is no point? by viperidaenz · · Score: 1

      and if the bugs don't effect your application?

    3. Re:There is no point? by shutdown+-p+now · · Score: 1

      Then you don't care. The problem is when the bugs affect other code that has to run on the same Python interpreter. In many cases this can be circumvented by having your own private Python interpreter shipped with the app and isolated from outside code, but sometimes you have to provide extensibility points and such, and then users of those may be affected.

  27. The Client by XcepticZP · · Score: 3, Insightful

    It's all fine and dandy to switch over to a new version of python. But unless we can justify it to our client, it ain't gonna happen. The client just isn't going to go for it unless they see some measurable/provable benefit to switching. From their point of view it works, and we'd better damn well not touch it. Unfortunately, the codebase has grown over the years, and sloppy developers have come and gone, leaving the rest of us with a brittle codebase that has very little code-coverage. This is most certainly NOT an ideal scenario when it comes to upgrading, as there are too many unknowns. And that's assuming we could get the client's permission, because yes, the code belongs to them.

  28. We did it! by Impy+the+Impiuos+Imp · · Score: 1

    Congratulations, you were successful. If it isn't broke, hundreds of thousands of installations don't want to fix it.

    --
    (-1: Post disagrees with my already-settled worldview) is not a valid mod option.
  29. Deveopler Blindness by Anonymous Coward · · Score: 2, Insightful

    The appropriate question is: Why should I re-write/replace/upgrade my software, that works perfectly fine(!) because some developer of the Python project decided to refactor/deprecate a function/break a feature or otherwise fiddle with the system.

    Any software that runs properly today, should continue running long into the future. If it doesn't, if the langauge developers break my software, they are the issue.

    From a user perspective, there is nothing I hate more than some app that suddenly needs a completely different version of Java than the one I'm running! My app ran on Java 1.6.1 through 20, but suddenly on 21 forward it doesn't work? Java/Oracle broke my app and is forcing me onto an upgrade treadmill which I have no genuine need to be on.

    This is what I call developer blindness. They feel that they know better and that users or other developers are stupid for not embracing the idea that wheelSpinNG() is vasly superior to the now deprecated wheelSpin(). For all the Microsoft hate that goes on around here, they have historically done a fantastic job at maintaining backward compatibility. You seem to want to fail it.

    1. Re:Deveopler Blindness by fyngyrz · · Score: 1

      For all the Microsoft hate that goes on around here, they have historically done a fantastic job at maintaining backward compatibility.

      Until XP, yes. Then the creeping incompatibilities began. First down, window metrics. Buttons, title bars, really just about everything GUI oriented began to creep around (and de-register with pointer co-ordinates) as the new "look" used (required, really) window metrics not available to prior versions. This, of course, leaves out the terror-infused side trip into MIPS, PowerPC and Alpha versions of Windows NT. Anyone for inverted font metrics? Oh, the stories I could tell you...

      --
      I've fallen off your lawn, and I can't get up.
  30. because the writers of the language blew it by iggymanz · · Score: 2

    since the authors of python don't do proper unit and regression test and maintain backward compatibility, the 2.4, 2.5, 2.6 and 2.7 ARE DIFFERENT LANGUAGES! Its past time for open source wares (including the LInux kernel ABI) to get some maturity already in the realm of backwards compatibility, open source could go more places if it had that.

    1. Re:because the writers of the language blew it by Darinbob · · Score: 1

      Don't lump all open source in that arena. GCC does a good job of catching regression changes, but then it's a more mature product used in more critical situations than Python. GCC also has competitors, the language is standardized, and other advantages.

      Which does point to an odd trend I see. People see a new language that's gaining popularity and then that language gets adopted for a new project solely on the "cool" factor. Except that the language turns out to not be well supported or maintained and in the long run the projects based on it will struggle.

    2. Re:because the writers of the language blew it by petermgreen · · Score: 1

      the language is standardized

      For sufficiently small values of "standardised". The C standard is very loose leaving lots of stuff as "implementation dependent" or "undefined".

      Anyone remember the whole strict aliasing thing where the gcc guys decided it was ok to break long established but strictly speaking undefined code in the persuit of performance.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    3. Re:because the writers of the language blew it by ebno-10db · · Score: 1

      GCC also has competitors, the language is standardized, and other advantages.

      There is no reason Python can't be standardized, and maintain backwards compatibility. It's all up to Guido, et al. It's actually much easier than when you have to deal with standards committees, compatibility tests, etc. This whole business of breaking Python in sometimes small, and sometimes big, ways, is very unprofessional. It's one thing to do that with a language that's still in it's infancy, and is only used by a handful of people who accept that it will change in incompatible ways. Python though is way past that point.

    4. Re:because the writers of the language blew it by ebno-10db · · Score: 1

      For sufficiently small values of "standardised". The C standard is very loose leaving lots of stuff as "implementation dependent" or "undefined".

      The standard looks scarily undefined in places, but in practice I've had very few problems with it. Mostly it's a few basic rules, like don't assume chars are signed or unsigned, avoid modulo with negative numbers, etc. I've had bigger problems with endianness, which AFAIK no language standard can pin down.

      Anyone remember the whole strict aliasing thing where the gcc guys decided it was ok to break long established but strictly speaking undefined code in the persuit of performance.

      That was dumb, but the fix was so easy. Just use -fno-strict-aliasing.

    5. Re:because the writers of the language blew it by akozakie · · Score: 1

      100% true and also the reason I still only work in Python when situation requires it. The language is incredibly easy to write in (although the whitespace-controlled flow is weird and causes problems sometimes), it could be my language of choice - but it isn't. All because of one experience.

      A few years ago, 2.6 was still relatively new, but 3 was already promoted as the new thing we should be getting ready for (since it won't be 100% compatible) - a bit worrying, but what the hell. Some small client-server code for research use. Well defined interface, separate development by different authors. Not yet ready, but works fine in simple tests. Need to do an early demo - fast. Quick preparation of a scenario, check - looks good. Cool, we grab some small laptops, drives with the code and get to the airport. We have the whole evening to set it up - should be no problem.

      Whoops, we don't have the root passwords! Silly us. It's too late in the night to call the owners. Fine, we'll have to use what's installed. Hmm... Both 2.4 and 2.6 available. Our testing environment had 2.5, we didn't test with any other version yet, but we should be fine, right?

      Testing with 2.6. The program fails to work properly - empty answers to some calls or no reaction from the server. WTF?!? Fine, roll back to 2.4. Previous problems gone, new one appears. The responses are incomplete. Some data is skipped as if not there. WTF^2?!?

      A few hours of debugging, some potentially good ideas, but we need it working in the morning. Finally, after looking where (client? server?) the bugs seem to appear with each version, we had a crazy idea. Back to original code, quick test... and we were fine, we even got some sleep. The server worked fine on 2.4. The client worked fine on 2.6. Run them on different versions... done. Happy end. Rest of the debugging after the demo.

      This code worked fine with 2.5. In 2.4 - no warnings, no errors, just incorrect. In 2.6 - runs, but has problems. And these are small increments, said to be almost fully compatible - and version 3 was looming! That's when I decided that I can't trust the developers of Python for anything I might want to use a few years later. Thank you, but no.

      My old programs in some other languages still mostly work, unless I used some non-standard library which evolved in an incompatible direction (and the old version conflicts with something or is vulnerable and shouldn't). And I can fix such problems without "updating" good, working code. With some changes to the makefile I can even compile a short K&R C program I've written long ago just for fun. Python versions are not real upgrades, they don't have "compatibility modes" - that's why you need more than one if you're working with old code sometimes. And I'm not talking about doing anything advanced!

      That's why I think Python is a good idea broken by eager beavers. Upgrade the compiler/interpreter all you want, but treat language changes as standard versions and support old ones in the same compiler. If you play with the language expect to have problems getting users to upgrade.

    6. Re:because the writers of the language blew it by fnj · · Score: 1

      I might be missing something. Undefined behavior clearly labeled as such in the language spec, is undefined, period. It could do anything up to and including erasing your home directory contents. It doesn't matter if that undefined behavior is allowed to vary. Do not code undefined behavior. End of problem.

  31. Blame Jython by Miamicanes · · Score: 4, Informative

    I think a large part of it is due to the convenience of Jython, which makes it really easy to embed Python directly into a Java application as a user scripting engine that doesn't require explicit installation or configuration by the user. I'd go so far as to say that Jython is probably 99% of the reason WHY so many Java apps that support scripting do it via Python instead of some other language.

    Jython only supports 2.x syntax.

    There IS a way to bind a Python interpreter to Java so it can exchange objects directly (py4j), but it still requires separate installation of Python, with all the usual things that can go wrong (and frequently do, at least under Windows), like environment variables, path definitions, etc.

    There's also IronPython, which is another 2.x-only Python that enjoys lots of "automatic" mindshare from Windows developers because it presents itself as the "official Microsoft-blessed .Net CLR Python" for Windows, and everyone remembers that a decade ago, Activestate Perl was the de-facto Perl for anyone running Windows (and eventually, the defacto Perl, period). It's basically abandonware at this point, but ActiveState doesn't go out of its way to make it obvious.

    That said, I'd put most of the blame/credit for 2.x on the non-existence of "Jython 3".

    1. Re:Blame Jython by shutdown+-p+now · · Score: 1

      I don't think that contributes much. Jython certainly has some userbase, including its use for embedded scripting, but it's really small compared to using Python as a language in its own right (for web apps, scientific computing, and for GUI on Linux). This is especially true since Java has had standardized embedded scripting APIs (javax.script) for many years now, and any implementation is required to provide JavaScript through it - so JS is the golden standard for Java application scripting, not Python. IronPython is a more lucrative proposition for scripting on .NET, especially now that DLR is a core part of CLR, and C# has "dynamic", ensuring smooth integration both ways - but it's still a minuscule user base.

      By the way, IronPython is no longer an "official Microsoft-blessed Python" for Windows or anything else - it's not a Microsoft project anymore, hasn't been for a few years now. I don't think there's really such a thing as "official MS-blessed Python" at this point, but if you look at PTVS - which is an "official MS-blessed Python IDE for Windows" - then it actually works best with CPython.

  32. Re:Why 2.6? Why not 3.x? by Anonymous Coward · · Score: 0

    It's been over 5 years. Why are you still on the 2.x line? Why are NEW PROJECTS still being made for 2.x? Stop being complete asshats and FUCKING UPDATE!

    Because the development staff are skilled and efficient with the 2.x line, but not the 3.x line. As such any new project will require an order of magnitude more time using the 3.x line, at a minimum.

    Unless you can convince mgmt that it is a good thing to have all developers out for paid education for a week or series of weeks for a good class on all the new bits and pieces in 3.x, as well as all the 2.x pieces that are no longer supported in 3.x.

    It all boils down to economics.. how much money are you willing to loose to get the next project done in 3.x.. for most companies.. that number is ZERO

  33. python is... by Anonymous Coward · · Score: 0

    Because Python is a scripting language, and you don't get to decide the interpreter version.

  34. Re:python sucks by shutdown+-p+now · · Score: 5, Informative

    If you are upgrading Python without so much as reading about what 3.x is and how it's different from 2.x, you're probably not qualified to be handling such an upgrade.

    3.x was explicitly declared as a new language with breaking changes all around, so as to get rid of legacy cruft. This information was widely disseminated through all official channels - documentation, mailing lists, changelogs etc - and carried over on unofficial ones, like textbooks. That's precisely why all Linux distros out there install 3.x and 2.x side by side, and don't treat one as an update to another.

    If your Linux distro silently re-symlinked /usr/bin/python to python3 when you installed the latter, then your Linux distro is broken - you should complain to its maintainers. If you installed it manually, then you have only yourself to blame.

    And, getting back on topic, this all has nothing to do with 2.6 -> 2.7 transition, where the language is the same and backwards-compatible.

  35. Re:Not Python... by Anonymous Coward · · Score: 0

    Javascript is the language of the Internet!

  36. Re:python sucks by Anonymous Coward · · Score: 0

    And, if you've wrapped any of your c/c++ code in dll's, you'll have to recompile them for the new python version. :-|

  37. To The Top!!! Score: 5 The ONLY Logical Answer by Anonymous Coward · · Score: 0

    Why doesn't the new version of Python interpreter support older dialects ?

    This. This is the right question!

    1. Re:To The Top!!! Score: 5 The ONLY Logical Answer by Anonymous Coward · · Score: 0

      But, but, but unicode strings!!
      But seriously, the changes in python 3 make for a more well defined software interface to the way python works.
      Sure you could fix something by simply adding a new way to do something, but then you have to maintain both the new and old way.

  38. Host application still uses Python 2.6 by Anonymous Coward · · Score: 0

    In visual effects and animation, many of the 2013 editions of animation applications that are scriptable (Maya, Nuke, Hiero, etc.) are still stuck on Python 2.6 (usually following Autodesk's lead). A few of the 2014 software editions now use Python 2.7, but studios rarely upgrade to the latest and greatest in the middle of a show. Lots of things can break, especially C++ plugins that might also be scriptable through a particular Python version.

  39. Re:python sucks by sandertje · · Score: 1

    It would probably have been less work to just change the default interpreter back to python 2.5, and edit only the 'one piece of software' that required python 3 to /usr/bin/python3

  40. In comparison with corporate Java usage by Anonymous Coward · · Score: 0

    .. its still very early to migrate to a newer version.

    Last couple of years I've worked at shops still using WebSphere 6.1 (JDK 1.5 = September 30, 2004).
    My current project involves an application on the 'new' platform, WebSphere 7.0 (JDK 1.6 = December 11, 2006) for
    a rather big bank (top 500).

    Just my 2 cents,

    Lau

    1. Re:In comparison with corporate Java usage by Anonymous Coward · · Score: 0

      .. its still very early to migrate to a newer version.

      Last couple of years I've worked at shops still using WebSphere 6.1 (JDK 1.5 = September 30, 2004).
      My current project involves an application on the 'new' platform, WebSphere 7.0 (JDK 1.6 = December 11, 2006) for
      a rather big bank (top 500).

      Just my 2 cents,

      Lau

      My last job we had two critical financial apps running on WL8.1 (jdk 1.4, although one was jrockit equivalent of 1.4). They were considered "SOX level 1" (Sarbanes/Oxley) and had to have full disaster recovery failover (zero data loss) within an hour, and if either of them went down (machine crash or whatever) it was top priority over anything else to get them back up (company sales for multiple sub-businesses relied on one of them - if it was down they couldn't sell stuff, no sales=no profit).

      We had no choice, the company was pressuring the vendors a bit since the outside auditors were giving them crap about running mission critical accounting apps on an EOL'd product (WL8.1) on an EOL'd java (1.4), for several years... but also (for auditing sake) we could only run them on a software platform/language that the vendor had certified their product to run on. The vendors did finally test/certify on new upgraded platforms, which we upgraded to 1-1/2 yrs ago or so... which are running jdk1.6, which EOL'd in Nov2012, a few months after we finally upgraded to the new 'vendor certified' release (all new servers, including new OS, new software, new Oracle back end servers, etc - with lots of testing before we cut over)... I guarantee they'll be running on that for at least a few years...

      (Fortune *10* multinational company FYI, not a small deal).

  41. support is the wrong word by HussamAl-Tayeb · · Score: 1

    a lot of applications have simply not been ported from python 2.7 to python 3.x

  42. Re:Python 2.5 - September 19, 2006 by Anonymous Coward · · Score: 0

    Python is dead end for MySQL database client module!

  43. They're already using Python 3.x. by Anonymous Coward · · Score: 0

    A Wall Street bank, a top-tier cancer hospital, or a world-class university would have upgraded to Python 3.x years ago. That's just what makes them the best. They don't wait for others to tell them what do to. They know what to do before anyone else does, and then they do it. That includes upgrading to Python 3.x early.

    1. Re:They're already using Python 3.x. by achbed · · Score: 1

      A Wall Street bank, a top-tier cancer hospital, or a world-class university would have upgraded to Python 3.x years ago. That's just what makes them the best. They don't wait for others to tell them what do to. They know what to do before anyone else does, and then they do it. That includes upgrading to Python 3.x early.

      Explain to me why all these folks still have machines running DOS if they're so forward looking?

    2. Re:They're already using Python 3.x. by Anonymous Coward · · Score: 0

      "A Wall Street bank, a top-tier cancer hospital, or a world-class university..."

      One of these things is not nearly on the level of the other two. Not even close.

  44. Its why I hate using OSS solutions by Anonymous Coward · · Score: 0

    Here is our free whiz bang program....it just needs the half a dozen dependencies listed below, that will not all be maintained, and at least one will break the others regularly....you did want to spend your life as an unpaid programmer instead of working didn't you.

    1. Re:Its why I hate using OSS solutions by tomhath · · Score: 1

      And this is different from commercial software how?

  45. Because it must be useful by dwheeler · · Score: 1

    It's not complicated. It's simple. Upgrading a production system is a *big deal*, and in many places there is a long delay between updates. Enterprises will often pay big $$$ to NOT upgrade (other than security patches), because they want rock-solid stability much more than the latest hotness.

    E.G., RHEL 5 and CentOS 5 are widely deployed, and will be used for some time to come as production systems. They only support older versions of Python2. Therefore, *useful* programs that need to run on these widely-used systems must be written to run on these older systems.

    --
    - David A. Wheeler (see my Secure Programming HOWTO)
  46. Re:python sucks by sjames · · Score: 2

    Sounds like you did it wrong. Why didn't you just rename the binaries?

  47. Thanks for the info by Anonymous Coward · · Score: 0

    I was thinking about teaching my son Python as a first language, but after reading how often the maintainers break compatibility I can't be bothered now.
    I must be getting old cuz I'm so sick to death of the perpetual bullshit changes in IT. I've had a gut full of having to refactor my code every time a new c++ standard comes out. And how often these days can you download a project from source which compiles and links cleanly without having to fuck around with fixing link errors with missing or changed symbols in dependent libraries which aren't the exact version it's expecting?
    How much better is the experience browsing the web today using Firefox version 232 or whatever it's up to compared to the experience browsing the web in 1999 using Netscape? Fuck all I reckon.
    I can't understand why people are saying Microsoft is so great at maintaining backward compatibility. I seem to recall just about every new version of Visual Basic broke compatibility. That was one of my pet hates which drove me to Linux. That and the fact Windows used to crash 20 times a day.

    1. Re:Thanks for the info by ebno-10db · · Score: 1

      I've had a gut full of having to refactor my code every time a new c++ standard comes out.

      What refactoring have you had to do because of a new C++ standard?

    2. Re:Thanks for the info by Anonymous Coward · · Score: 0

      There are only 2 C++ standards released and TR1 for C++98. And the gap between the two standards was 13 years.

    3. Re:Thanks for the info by Desler · · Score: 1

      His post is even dumber in light of there only being C++98 and C++11. No one is obligated to use C++11 either.

  48. Universities by Anonymous Coward · · Score: 0

    Versions of everything are ancient. They never upgrade their software, and they won't let users do anything that remotely resembles admin work, because hackers. I can't even change the appearance of my desktop icons. I don't even think they don't upgrade for fear of breaking something. More probably they're just lazy and incompetent and wouldn't even know how to upgrade, and the last person who knew has since left to start a bakery.

  49. Python 3 isn't an upgrade to Python 2 by Anonymous Coward · · Score: 0

    It has the same name, has tools to convert from one to the other, and near identical syntax; but lack of backwards compatibility makes it a new product

    Trying to force people to migrate from one product to another always meets with massive amounts of inertia.

  50. When upgrades break code by fyngyrz · · Score: 5, Interesting

    The problem with upgrades is the developers don't take nearly enough care to ensure compatibility with existing software. For instance, I moved a Python script from an older machine (redhat 9) to an Ubuntu 12 system with a later 2.x series Python, and the script immediately bombed out. Turned out that I'd used "as" as a variable name, and it had become a reserved word in the interim. Elsewhere, I was adding ints to floats or vice-versa; now that produces an error. Somewhere, the behavior of "global" changed. I had a procedure written with global VariableName up front so the procedure could see a global switch. I handed the script to someone else, and they had to *remove* that to make it work.

    I moved a large system depending on perl scripts (yes, I know, not Python, but the issues are identical) across the same machine pair and it was so broken under the new perl that it took me two months (and cost my client a great deal of money) to adequately debug and update it. From external module changes (use DBI) to how references to hashes were handled, it was one thing after another. What made me fume the entire time is that this stuff worked *perfectly* under redhat 9 with the earlier perl -- it really wasn't broken. Bloody perl was broken! Worse, I'd abandoned Perl for Python years ago, and my Perl skills were very rusty... that's tough when you're trying to work through tens of thousands of lines of sophisticated code. I truly regret every line of Perl I ever wrote, and cringe at the idea of having to revisit it for any reason at all, because Perl, whatever its true merits, is a language that I was destined to hate to my very $core;

    This kind of thing makes me extremely unwilling to upgrade; for that matter, it can send me hunting for the old version to install in new machines, although that can present its own set of problems and requires at least some of a different skill set than programming that really leans more into system administration, which I am not in the least enthused about. For some strange reason, enjoying research on auroras does not automatically carry with it a predilection for meddling with OS environments.

    This is all part of a larger gripe set I have where makers of languages and APIs break existing code in favor of new ideas. Here's my position: If you ship the language with X features, you have NO BUSINESS breaking ANY of those features. You have a new idea? Fine. Implement it as something completely new within the language or the API. If it's got new keywords, provide the programmer a switch to enable them -- words that were not reserved before may have crept into the user's namespace(s.) Never take a call out of an API. Never make an API call work differently. If you think you need to do that, then *I* think you need an entirely new API. If you even use the word "deprecated", I will burn you in effigy and spit on the ashes. Furthermore, if you do it right, you will NEVER need to say "end of life" because the most current version will still run the first code ever written for API or language 1.0; upgrades will actually be upgrades rather than incompatible replacements.

    Windows got this very nearly right for a long time, then with XP, they began to break everything from window metrics to system calls. By the time Windows 7 rolled around, apps that worked perfectly looked like trash and worked even worse, and I tossed my Windows machine in the can both for development and as a user. Apple's guilty of this too, even going so far as to obsolete their own applications and feature-sets. One really irritating example of this is having bought Aperture 1, 2, and 3 for OSX 10.6, I bought a new camera, a Canon EOS 6D. Works *fabulous*, pretty much the first DSLR I've ever been actually satisfied with. Both Lightroom and Aperture required an update to read the RAW images. Lightroom upgrade went smoothly. The Aperture upgrade? Told me that in order to install the updated RAW support, I'd have to upgrade the OS. But 10.7 and later are not highly compatible upgrades, I have to support OSX

    --
    I've fallen off your lawn, and I can't get up.
    1. Re:When upgrades break code by Intron · · Score: 2

      That was probably going from Perl 4 to Perl 5. Going across a major release where many features have changed is going to cause problems with any language. The changes from Python 2.5 to 2.7 are likely to be much less pain.

      --
      Intron: the portion of DNA which expresses nothing useful.
    2. Re:When upgrades break code by fyngyrz · · Score: 5, Insightful

      The changes from Python 2.5 to 2.7 are likely to be much less pa

      Why should I accept any pain at all? How about if I just don't upgrade, and my stuff doesn't break, and I continue on making new things? Isn't that more sensible on every possible level?

      --
      I've fallen off your lawn, and I can't get up.
    3. Re:When upgrades break code by smash · · Score: 5, Insightful

      Exactly that. Nobody cares if your new version is 10% faster, or has new feature X. If someone is using your language for something serious in the real world, and your upgrade BREAKS CODE, then all bets are off.

      Even if the time and effort (in the real world, money, essentially) is spent to "fix" the project to work with the new version, all prior testing is essentially worthless, and the developer can't "trust" the code is correct and bug free any more until they've had sufficient time and testing to be comfortable with it.

      This problem is endemic in open source unfortunately, and not just for developers - constant UI change, application deprecation/replacement, etc. Every time you change something significantly, there's a real cost to any person using it, even if your software is free. Even if they decide not to use it any more - they need to find a replacement and re-learn how to use the replacement.

      I'm not saying "never change anything". But more work needs to be put into shims, switches, etc. to enable backwards compatible behaviour if possible - even if it is not enabled by default.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    4. Re:When upgrades break code by icebike · · Score: 4, Insightful

      Exactly.

      Refuse to accept new release that don't support backward compatibility of existing code.
      Every other sane programming language does this to the fullest extent possible.
      Seems Python likes to just cut the cord.

      --
      Sig Battery depleted. Reverting to safe mode.
    5. Re:When upgrades break code by phantomfive · · Score: 1

      Apple's guilty of this too, even going so far as to obsolete their own applications and feature-sets. One really irritating example of this is having bought Aperture 1, 2, and 3 for OSX 10.6, I bought a new camera, a Canon EOS 6D. Works *fabulous*, pretty much the first DSLR I've ever been actually satisfied with. Both Lightroom and Aperture required an update to read the RAW images. Lightroom upgrade went smoothly. The Aperture upgrade? Told me that in order to install the updated RAW support, I'd have to upgrade the OS. But 10.7 and later are not highly compatible upgrades, I have to support OSX 10.6 machines, and I really can't "just upgrade." So my investment in Aperture... out the window.

      I feel your pain. This is the primary reason I am transitioning away from OSX.

      --
      "First they came for the slanderers and i said nothing."
    6. Re:When upgrades break code by MarcoAtWork · · Score: 4, Insightful

      That was probably going from Perl 4 to Perl 5. Going across a major release where many features have changed is going to cause problems with any language. The changes from Python 2.5 to 2.7 are likely to be much less pain.

      not necessarily, in my experience one of the bigger issues is incompatible changes made in CPAN code: plenty of things change and it's not like you can say 'install from CPAN of 3 years ago'. If you write straight perl (i.e. no external modules) it's unusual for things to break badly, but if like most people you use CPAN modules you're at the mercy of each individual CPAN package mantainer

      --
      -- the cake is a lie
    7. Re:When upgrades break code by MarcoAtWork · · Score: 2

      this, and I am not sure how whomever decided the string/unicode changes in 3.x with no 2.x backwards compatibility couldn't figure out that it would be very unlikely that people would port all their code right away. This blog post I read a few days ago sums up some issues pretty well

      http://lucumr.pocoo.org/2014/1/5/unicode-in-2-and-3/

      --
      -- the cake is a lie
    8. Re:When upgrades break code by MikeBabcock · · Score: 1

      I really wish for this reason Python had gone with a versioned binary name.

      Using #!/usr/bin/python2 -ttu in a script makes me feel safe that it won't crash on someone.

      --
      - Michael T. Babcock (Yes, I blog)
    9. Re:When upgrades break code by UnknownSoldier · · Score: 3, Insightful

      Very nice post! If I may summarize:

      To paraphrase Robert Monroe: "Change is the only constant. Fast change is called revolution, slow change evolution."

      The inexperienced young want change because of some cool new feature X, Y, and Z.
      The experienced older want stability because they know the wisdom of "Don't fix what isn't broken!"

      Businesses typically want stability because why would they pay someone again to re-write, refind bugs, re-test, and re-fix bugs, when the old version worked before?

      The only reason to *really* change an API is because of security issues, aka how Microsoft "extended" legagy C API's to 'safe' versions such as: scanf vs scanf_s, etc.

    10. Re:When upgrades break code by dbIII · · Score: 2

      Since there is no DLL hell they don't have to care, even though it would be nice if they did. If one application needs 2.7 and another needs 2.5 you just have both. The users can still obtain the old versions and install time on a decent net connection should be under a minute. It's also small enough that distributors of the software can just bundle the correct python.

    11. Re:When upgrades break code by icebike · · Score: 2

      True, but then why do we have this entire whiny slashdot article wondering why people support old Python versions?

      The clear implication is that it is somehow the programmers fault for not re-writing the universe each time
      python developers sneeze? It should be patently obvious that the fault lies with the Python Devs for failing
      to bring their users along, and that some people, most people, just about all people, have something better
      to do than rewrite systems every three years.

      But you STILL have a maintenance headache, because you might not be entirely sure which version the script you inherited
      was meant to run with. I've seen plenty of Python scripts shipped by people I assume are professionals because they work for
      people like Red Hat, or Google, that haven't got a single clue in the code about which version they expect.

      --
      Sig Battery depleted. Reverting to safe mode.
    12. Re:When upgrades break code by MurukeshM · · Score: 1

      Isn't this what they do? In Ubuntu and Arch Linux, Python 3.x is python3, Python 2.x is python2 (with binaries for minor python versions as well: python2.7 and python3.3 are both binaries available on my system). Usually, (as per Python's recommendations), python is symlinked to python2, but on Arch, it points to python3.

    13. Re:When upgrades break code by dbIII · · Score: 1

      True, but then why do we have this entire whiny slashdot article wondering why people support old Python versions?

      I can only assume it's from the people who are using the new version and think everyone should be using it.

    14. Re:When upgrades break code by Eunuchswear · · Score: 1

      I really wish for this reason Python had gone with a versioned binary name.

      Using #!/usr/bin/python2 -ttu in a script makes me feel safe that it won't crash on someone.

      It didn't?

      ~ $ python2.5
      Python 2.5.4 (r254:67916, May 17 2010, 21:00:32)
      [GCC 4.2.1] on linux2
      Type "help", "copyright", "credits" or "license" for more information.
      >>>

      On my n900, but would be same on any other Debian system.

      --
      Watch this Heartland Institute video
    15. Re:When upgrades break code by mwvdlee · · Score: 1

      Every language has it's own version of hell.

      If you're using different versions of a language, you will have framework hell.
      If those different versions aren't backwards compatibility, you will have programming hell.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    16. Re:When upgrades break code by dbIII · · Score: 1

      Yes but it's not so hard to use the same environment as whoever wrote it. More like an annoying rainy afternoon where you need to get an umbrella than a painful hell.

    17. Re:When upgrades break code by mwvdlee · · Score: 1

      What if one framework needs 2.7, another needs 2.5 and you need to use them both in your project?

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    18. Re:When upgrades break code by Anonymous Coward · · Score: 0

      Don't get me wrong -- I think Python (2 series) is easily the best scripting language out there for my needs, which range from CGI to SDR radio interfacing to auroral prediction to random other things I encounter day to day.

      Also good for wedge rasterization and cosine filterbank folding, just to name a couple more. :)

    19. Re:When upgrades break code by Anonymous Coward · · Score: 0

      You do the same thing that everyone else does when some software doesn't fit 100% their requirements - customise the software, use an alternative, or write your own.

    20. Re:When upgrades break code by dbIII · · Score: 1

      Do you want someone to hold your hand to help you across the street as well?
      While it may not be ideal, and in fact may be a stupid situation, that's a lot better than the projects that require multiple languages so not exactly something that should be considered even worth complaining about because dealing with it is not exactly difficult. Go whine to a long term VB developer that has seen vast differences in a relatively short time to get an idea of what a real fuckup looks like and how it can still be worked around.

    21. Re:When upgrades break code by GbrDead · · Score: 1

      > It's not Python. It just kinda looks like Python. Should have called it Reptile or WiggleWorm or something.

      Why not Towers?

    22. Re:When upgrades break code by mwvdlee · · Score: 1

      The other alternative would be for 2.7 of the language to be backwards compatible with 2.5 so both frameworks would work on 2.7 (or a higher version number).
      This is the case for most languages. Just because there are even worse situations, doesn't make this situation good.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    23. Re: When upgrades break code by the-matt-mobile · · Score: 1

      I was with you until you brought up VB and then proved you haven't got a clue what you are talking about. VB.NET code written for the 1.0 framework 14 years ago compiles and works exactly the same in the latest 4.5 release, full stop. If you're really referring to classic VB6 and prior, or the false notion that VB6 was ever intended to able to magically port to .NET, that's pretty much ancient history at this point. There's lots to complain about with VB, but Microsoft has had language compatibility right for almost 15 years now.

    24. Re: When upgrades break code by dbIII · · Score: 1

      VB6 was ever intended to able to magically port to .NET

      That is what I mean by a difficult situation (or VB5 to VB6 etc) as distinct from python 2.5 to 2.7, which are very similar to each other.
      "Long term" was supposed to be the big clue that I was not writing about anything recent. The relatively short time was a period of frequent changes a long time back.

      Oddly enough there is still some VB5 code in my workplace (rarely used scientific stuff) that is being rewritten as python so it can run on more than just Win98 virtual machines, which is why the example came to mind and it dredged up the memories of VB changing a lot every couple of years.

    25. Re:When upgrades break code by dbIII · · Score: 1

      They are almost the same language. Didn't you learn how to use more than one at some point? Haven't you used more than one in a project? That's the sort of thing even engineers that dabble are supposed to be able to do let alone people that have coding as their primary job description.
      It may be annoying, and for the record I don't think it's a good idea either, but I don't see how it could be described as difficult.

    26. Re:When upgrades break code by ThirdPrize · · Score: 1

      Yeah, because I would love to spend my time maintaining something that is no longer supported, while my skill set slowly goes the same way as my will to live.

      You really need to badger your managers to upgrade things every couple of years or so. If you do it continually then it is not going to be as painful as jumping a couple of releases of the language in one go. Unless you do new stuff and use the latest technologies then your working practices are going to remain the same. Things move fast these days (though not that fast in the python world). To reference a language I am more familiar with, I am sure a C# application written in .Net 1 would probably still compile and run on a new machine, however, whatever it is doing, you can guarantee there are better ways of doing it these days. Probably in half the code.

      --
      I have excellent Karma and I am not afraid to Troll it.
    27. Re:When upgrades break code by mwvdlee · · Score: 1

      I think we have some confussion over what a "framework" is.
      You seem to see it as a complete standalone solution you can configure. Like WordPress or a typical CMS.
      I'm talking about a piece of code that requires programming to be usable; i.e. Zope, Django or libraries that provide filetype support; these must run in a single environment with the rest of the code and frameworks.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    28. Re:When upgrades break code by Anonymous Coward · · Score: 0

      I got tired of 'fixing' the breakage and created a 2to3 import library for my code. I basically reimplemented bits and pieces as necessary and pop warnings when I use it so I can convert it correctly.

      Its ugly as hell but lets me use the code on both. Basically I grab the python version which thankfully they didnt break between versions and do tons of if/else. I am relying on a 'feature' of python where it compiles the code but does not actually run it if not executed (so no exception). So one line in 3.x path is an error in 2.x and the other way around.

      I know I can not be alone creating libraries like this. But this single import I have usually fixes many of the issues I have.

    29. Re:When upgrades break code by Karzz1 · · Score: 1

      This problem is endemic in open source unfortunately, and not just for developers - constant UI change, application deprecation/replacement, etc.

      Which is why most projects will put older versions into a maintenance mode doing security/bug fixes but no new features *before* arbitrarily EOL'ing that version and dropping support.

      --
      Beware of he who would deny you access to information, for in his heart he dreams himself your master.
    30. Re:When upgrades break code by xfizik · · Score: 1

      You don't have to accept any pain at all. Either don't upgrade or stick to the version of Python you originally used and it will keep working forever. If it's not available by default on the new system - do a custom build (it's open source after all). Why make your own life more difficult?
      And please remember that Python's (and other software in general) design decisions are based on a lot of different factors - the world doesn't revolve around your little script. If the Python release cycle doesn't suit your needs then perhaps you've picked the wrong tool for your job.

    31. Re: When upgrades break code by Anonymous Coward · · Score: 0

      Tl;Dr: I want to write code but not maintain it.

    32. Re:When upgrades break code by Eil · · Score: 1

      TL;DR: I want to write code but do not want to actually maintain it.

    33. Re: When upgrades break code by douglas.w.goodall300 · · Score: 1

      if you are using apple machines in production, which I tried to do, pain comes from unexpected places, even from the hardware. My very expensive Mac Pro can not be upgraded past snow leopard because of a dumb 32-bit boot rom. In the future I will have to assume that an apple platform will only remain stable as long as you can buy AppleCare for it, which in my case has been three years. I am still pained that my 8-core 16gb-ram 3.0ghz machine has been obsoleted in this way. In all other respects it is still a very capable machine.

    34. Re: When upgrades break code by phantomfive · · Score: 1

      In the future I will have to assume that an apple platform will only remain stable as long as you can buy AppleCare for it, which in my case has been three years.

      Yeah, three years seems to be the point where Apple is happy to get rid of APIs, Libraries, or anything else people might still be using.

      --
      "First they came for the slanderers and i said nothing."
    35. Re:When upgrades break code by Anonymous Coward · · Score: 0

      Only thing I read was :"I used "as" as a variable name".
        Aaaaaaand... you're fired.

        Zen of python. And choose explicit variable names. But apparently that didn't teach you a lesson.

    36. Re:When upgrades break code by themusicgod1 · · Score: 1

      I truly regret every line of Perl I ever wrote

      Have you at least purchased Bad Code Offsets? Sounds like you could use them.

      --
      GENERATION 26: The first time you see this, copy it into your sig on any forum and add 1 to the generation.
    37. Re:When upgrades break code by themusicgod1 · · Score: 1

      ...that was not where that comment was supposed to go

      --
      GENERATION 26: The first time you see this, copy it into your sig on any forum and add 1 to the generation.
    38. Re:When upgrades break code by dbIII · · Score: 1

      Isn't that the sort of thing you were supposed to learn to deal with in your studies, setting up your own environment to deal with situations like that? Do you run in terror away from toolchains for cross compiling because it's all just too different?

      I really do not get why people see this as a big deal and I think your suggestion of a project under your control that somehow needs two very similar environments instead of just one is unlikely bullshit anyway.
      I'm no python fan. I hate the very concept of whitespace with meaning even though I can deal with it, but I see your objection here as being argument about triviality for the sake of it.

    39. Re:When upgrades break code by fyngyrz · · Score: 1

      Saw it anyway. Hilarious. :)

      --
      I've fallen off your lawn, and I can't get up.
    40. Re:When upgrades break code by MikeBabcock · · Score: 1

      Its frequently done by distros but not done officially by Python .. that's my point. With an interpreter being more like an operating system of its own, it would be nice if you could properly specify the version to run in your application header.

      --
      - Michael T. Babcock (Yes, I blog)
    41. Re:When upgrades break code by MikeBabcock · · Score: 1

      That's not Python's fault; compile your own copy of Python 2.x and you'll get a 'python' binary, not a 'python2' binary. The distributions figured out the problem between python 1 and python 2 and started doing that themselves.

      --
      - Michael T. Babcock (Yes, I blog)
    42. Re:When upgrades break code by smash · · Score: 1

      All that does is delay acceptance of the new version and doesn't make it any easier to migrate. It just kicks the can down the road a little bit.

      If the creators of C made so many code-breaking changes to C over the years, there's no way in hell it would be the language of choice for operating system development. Every time you make a change to the language which breaks code because you can't be bothered maintaining backwards compatibility, you are breaking the code for all of your users and creating a shit-tonne of extra work (and wasted time) that otherwise would not exist. There really should be a fucking good reason for that.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    43. Re:When upgrades break code by jc42 · · Score: 1

      was probably going from Perl 4 to Perl 5. Going across a major release where many features have changed is going to cause problems with any language.

      Yeah, I remember that. I looked over the impressively long list of incompatibilities of perl 4 and 5, and wasn't sure I wanted to deal with the hassle. But I rounded up all my zillion lines of perl in hundreds of scripts, took a deep breath, and started putting them through their tests with the new perl5 release. I was unable to find anything at all that didn't work the same as before. Even when I looked for my programs that used the things that were on the incompatibility list, they all still worked unchanged.

      So I installed perl5 on all the machines that I had available, and tested all my perl code on all of them. No problems anywhere. I was tempted to try to construct a few test programs that worked differently on 4 and 5, but I was busy and never got around to it. In any case, I was duly impressed by the difficulty I had getting burned by the supposed incompatibilities.

      I've mentioned this to a number of other friends who like and use perl, and they all had the same story. So I'm not the only one like that.

      I wonder what that guy was doing that had so much trouble and ended up hating perl as a result. Is he an expert at writing code that's dependent on the most obscure machine or OS compatibilities that he can find? I suppose that could be a useful talent in some parts of the software industry.

      My conjecture is that this apparent strong backward compatibility is a consequence of the fact that perl's "upgrades" have historically been designed to make the language more general, along the lines of the perl mantra "There's more than one way to do it". The approach has been to make all those ways work correctly, i.e., the way that programmers would usually want them to work. This approach would tend to lead to continued support of the older ways of doing things, since that's what the experienced perl programmers would expect.

      I've also collected a lot of C code, going back to the late 1970s, and I've hardly ever had to rewrite anything for new compiler versions. But I've understood from the start that C was intended as a "high-level assembly language", not a true high-level language, and I've always used assembly-like defensive programming techniques in C and that might explain why I never seem to get burned by C incompatibility problems. (I can't say the same for the silly warnings that so many C compilers produce nowadays. They seem be be mistaking C for a high-level language aimed at novices. But they generally include options to suppress most of the warnings, so it's not that big a problem, just a minor hassle. ;-)

      --
      Those who do study history are doomed to stand helplessly by while everyone else repeats it.
    44. Re:When upgrades break code by Anonymous Coward · · Score: 0

      Another reason why Ruby is superior.

      Not one of my Ruby projects broke from 1.9.0 all the way up to 2.1.0 and I need to do no extra work to make sure that it runs properly on every version > 1.9

  51. Re:python sucks by pe1rxq · · Score: 0

    All these crappy python applications asume that /usr/bin/python is just the right version for them.
    Both python 2.5 and python 3.0 install with a version number (e.g. /usr/bin/python2.7 ), and under the generic /usr/bin/python.
    What did you want me to rename exactly? And why should I as a user need to rename stuff just because python developpers can't be bothered to use decent versioning?

    --
    Secure messaging: http://quickmsg.vreeken.net/
  52. Re:python sucks by pe1rxq · · Score: 2, Insightful

    Bullshit.
    All programs had '/usr/bin/python' set as their interpreter.
    Some developpers asumed it would be python 2.5, the others assumed it would point to 3.0.

    Why is it my fault (the user of a package) that python developpers make a mess of their versioning system?
    They made a new and incompatible language and gave the interpreter the exact same name and you think I am not qualified??????

    --
    Secure messaging: http://quickmsg.vreeken.net/
  53. Everything Depends by Anonymous Coward · · Score: 0

    Some environments and languages prioritize backwards compatibility above all else. Those systems tend not to have much trouble running old code. Sounds great, but over long stretches of time this can result in entire ecosystems of code and software that looks old, acts old, feels old, and has difficulty selling to customers.

    Python, I think we can say, is not one of those.

    OK, so any port, even a relatively easy one, involves opening the door to problems. That means a test cycle will be required. If your developers are ready and available this can be a small matter easily handled. However in many environments, once a system is delivered, it takes organizational support to begin changing it. No matter how small the change appears to be! If that support isn't there then forget it.

    Some developers are given a relatively free hand and can take on projects just because they think the merits stand up. Other times the devs are on a short leash.

    And we haven't even discussed matters of system size and complexity yet.

    As I say, everything depends.

    1. Re:Everything Depends by ebno-10db · · Score: 1

      Some environments and languages prioritize backwards compatibility above all else. Those systems tend not to have much trouble running old code. Sounds great, but over long stretches of time this can result in entire ecosystems of code and software that looks old, acts old, feels old, and has difficulty selling to customers.

      Conversely some environments incorporate change for the sake of change. I suppose unnecessary change is good for fashion design, but it sucks for serious tools. It's as though a car manufacturer decided to put the gas pedal on the left just so people didn't think their designs were stagnating.

      As for languages, end customers don't care. Developers care, but serious developers are usually interested in backwards compatibility. That requires some sacrifices, but it's generally worth it. I have no desire to keep up with unnecessary futzing in someone's quest for the perfect language, which is why I've soured on Python.

  54. Re:python sucks by pe1rxq · · Score: 1

    If only the one piece of software was just one executable....
    Even then it was conversion work I as a user should not have to do.

    --
    Secure messaging: http://quickmsg.vreeken.net/
  55. Why is support for old versions even needed? by TheloniousToady · · Score: 2

    Why are we Python developers inflicting so much pain on ourselves to support antiquated Python releases?

    If I were a Python developer, instead of Python user, and there was a lot of pain supporting old Pythons, I'd just stop supporting them (instead of whining.) Older versions of Python only receive bug fixes. People who are still using an older version evidently are happy with it, bugs included. So, Python developers should fix old bugs if it's painless, or not if it's painful.

    About the only exception I can think of is security problems: if a security flaw in an old version is suddenly revealed, it should be fixed by Python developers if at all possible. Then again, if that becomes too much trouble for Python developers, they can just (politely) say "if this bug really is a problem for you, you should just pay the pain yourself by upgrading to a newer version where we've fixed it."

    Another clear exception is that the last 2.x version, 2.7, should have its bugs fixed into the foreseeable future because so many of us still prefer 2.x. Then again, I would have already switched to 3.x if a 2.7 didn't (already and into the foreseeable future) work just fine for everything I need Python for.

    1. Re:Why is support for old versions even needed? by fnj · · Score: 1

      I smell Windows culture in this reply. Anybody running Windows can upgrade python at any time. In the real world, it's not so easy. Anyone using RHEL5 is stuck with python 2.4 as /usr/bin/python as long as he uses RHEL5, period. RHEL5 is not yet EOL, and still has a large and important user base. Is it your proposal to tell everyone using RHEL5, defense contractors and all, to go to hell as far as your product is concerned?

      RHEL6 is the same story. It has 2.6 and will always have 2.6. RHEL6 is absolutely current. There is no RHEL7 yet.

    2. Re:Why is support for old versions even needed? by TheloniousToady · · Score: 1

      No, I try not to use that kind of language, regardless of the issue.

      My point is basically that bug-fix upgrades either aren't needed (because the bugs haven't bothered users of old versions), or those users can undergo the pain of upgrading. A third alternative, of course, since Python is open source software, is for anyone who absolutely needs something fixed in an old version to fix it themselves.

      I don't use RHEL5, but my understanding is that folks who use any open source software are invited to submit a patch for anything that's bothering them. So, if you're committed to Python 2.4, for example, you can submit a patch to the Python folks to fix a bug in it that's suddenly bothering you after all these years. If they don't accept that, you are free to patch it on your own system. Or you are free to live with it (as you evidently have been). Or you are free migrate to some other distribution, if that's feasible. What's so bad about that? I thought that's just the kind of "freedom" that users of such systems value.

      And why would any of that be a basis for me to prescribe an unpleasant afterlife for anyone? I'd much prefer that everyone have a nice day. :-)

  56. Re:python sucks by shutdown+-p+now · · Score: 2

    Python has a well-defined versioning scheme for interpreters which is documented in detail. In particular, it requires that python2 is a symlink to some version of Python 2.x, and python3 is a symlink to some version of Python 3.x; authors of Python code should author their scripts correspondingly. If someone wrote a 3.x script that starts with #!/usr/bin/python, then they are the problem, and you should whack them with a stick until they fix that.

    Also note that this spec requires that python be the same as python2 until further notice, which will happen in 2015 at its earliest. So, again, if you or your distro symlinks python to python3, then that distro is breaking things.

    As a user of a package written in Python, you are, of course, not at fault. But it's not a fault of Python language & interpreter developers, either - as you can see, they were well aware of the problem, and came up with a working solution. They can't really help it if distros (which are, ultimately, responsible for installing Python on your system) don't follow that solution, or if app developers who use such distros write bad code.

  57. Whitespace, again by fyngyrz · · Score: 1

    On the other hand I don't expect much better from those who think whitespace is part of the language anyway....

    It's easy for a Python programmer to choose an editor that also knows about whitespace. The rest are good enough that they don't even need to. Personally, given the choice between extraneous { } all over the place and indentation, I definitely prefer indentation. It's fast, it's highly visual, and it reduces display clutter.

    --
    I've fallen off your lawn, and I can't get up.
    1. Re:Whitespace, again by fnj · · Score: 1

      So because the language itself depends on the exact configuration of whitespace in the code, which can't be discerned thoroughly via ordinary tools used in the ordinary way like cat, less, vi, emacs, we make them use a special editor? Some of us are not too thrilled with that.

      I haven't used python a lot. I never got a straight answer to how python deals with a mixture of tabs and space characters in the indenting. So I am at great pains to only use space characters in what python code I write. That is absolutely pointless extra work to deal with. For me and for anyone I give the code to who might need to edit it.

    2. Re:Whitespace, again by fyngyrz · · Score: 1

      So I am at great pains to only use space characters in what python code I write. That is absolutely pointless extra work to deal with.

      [shrug] You're doing it wrong. Mostly because you're stubborn. The technical term for that is "shooting yourself in the foot." You certainly don't have to do it wrong.

      The "special" editor I use most often is the one built into midnight commander (mc and mcedit), which, while not specifically designed as a Python editor, works perfectly. Also for Perl, shell scripts, etc. Other times, I use TextWrangler under OSX, which has the additional benefit of being UTF-8 aware, and also handles tabs and spaces in a way that ensures they are easily managed. The benefit is the use of a powerful, clutter-free language with strong visual blocking cues. This is not to say that I can't use vi; because I use tabs exclusively as my leading white space, there's zero confusion on my part about which block is which. I just prefer mcedit, frankly.

      I never got a straight answer to how python deals with a mixture of tabs and space characters in the indenting.

      Why in the *world* would you mix the two? Just use tabs. This gives you the visual blocking, you can globally change the indents with one move at any time, most decent editors let you see them, they reduce cursor movement keystrokes... seriously man, just apply yourself and it'll all become easy as heck. You're *making* it hard where it isn't hard at all.

      --
      I've fallen off your lawn, and I can't get up.
    3. Re:Whitespace, again by smellotron · · Score: 1

      [whitespace] can't be discerned thoroughly via ordinary tools used in the ordinary way like cat,

      How frequently do you look at code with cat, that invisible whitespace errors are a problem? It doesn't even paginate, ferchrissakes.

      ... less,

      I have no solution on this one, but as a quick hack I would start by searching for tab characters, or more-than-one space characters. The terminal highlight should help.

      ... vi,

      This works just fine in vim (not sure about vanilla vi):

      :set list listchars=tab:\\_

      That makes all hard tabs look like \___. Replace with prettier unicode line-art as you wish. I maintain a non-python codebase with some rather... creative... variations of whitespace, and it is trivial to match local whitespace conventions with listchars enabled.

      ... emacs

      I'm not an emacs guy, but if vim has a solution then I'd put money on the existence of an emacs solution.

      I never got a straight answer to how python deals with a mixture of tabs and space characters in the indenting.

      I do work with python regularly, and I still can't answer this. The practical solution is "don't mix indentation styles." While it is more than zero effort to do this, it should be all up-front effort learning the capabilities of your tools, and trivial effort day-to-day.

    4. Re:Whitespace, again by Anonymous Coward · · Score: 1

      You have some pretty good arguments as to why one should never use Python.

    5. Re:Whitespace, again by fnj · · Score: 1

      Agree. He made the case very convincingly.

    6. Re:Whitespace, again by qubezz · · Score: 1

      >>> Just use tabs.

      How about no. http://www.python.org/dev/peps/pep-0008/#tabs-or-spaces

      Four spaces are the specified indentation method. Tabs should be used solely to remain consistent with code that is already indented with tabs. Most Python IDEs will turn a tab into four spaces, and even block indent multiple selected rows with spaces with the press of tab. Dealing with legacy tab code by unknowledgeable devs is a pain, it is much easier to run autopep8 and check in a 100% space diff then deal with editing that code.

      Python 3 disallows mixing the use of tabs and spaces for indentation.

      Python 2 code indented with a mixture of tabs and spaces should be converted to using spaces exclusively.

    7. Re:Whitespace, again by smellotron · · Score: 1

      He made the case [why one should never use Python] very convincingly.

      How so? It sounds like you and the AC are just looking for an excuse to whine. Let me explain again: I maintain a non-Python codebase with horrendous whitespace, and a Python codebase with consistent whitespace. The non-Python codebase is full of maintenance developers shitting on each other's indentation, and it makes future maintenance more expensive.

    8. Re:Whitespace, again by smellotron · · Score: 1

      The PEP you quoted only applies to packages within the standard library. It also spends a few paragraphs warning against overzealous whitespace "harmonization". Even though a link to that PEP is extremely useful in this thread, please tone down the arrogance.

    9. Re:Whitespace, again by fyngyrz · · Score: 1

      1) Python 3 is completely irrelevant to me -- it's a different, incompatible language I have zero interest in.

      2) You're misinterpreting advice for libraries with advice for code

      So how about YES because....

      (a) mixing tabs and spaces has no inherent value,

      (b) tabs are higher value than spaces in code because you can change the size of a tab indent with one setting, whereas space indents are what they are and that's the end of it.

      (c) Python allows tabs for a reason, and that reason is so you can use them

      I've written a lot of Python, am highly effective in that pursuit, and I find the consistent use of tabs to be the way to go. Your advice is bad -- and wrongheaded.

      --
      I've fallen off your lawn, and I can't get up.
  58. Re:Why 2.6? Why not 3.x? by Anonymous Coward · · Score: 0

    It's been over 5 years. Why are you still on the 2.x line? Why are NEW PROJECTS still being made for 2.x? Stop being complete asshats and FUCKING UPDATE!

    Because the development staff are skilled and efficient with the 2.x line, but not the 3.x line. As such any new project will require an order of magnitude more time using the 3.x line, at a minimum.

    Unless you can convince mgmt that it is a good thing to have all developers out for paid education for a week or series of weeks for a good class on all the new bits and pieces in 3.x, as well as all the 2.x pieces that are no longer supported in 3.x.

    It all boils down to economics.. how much money are you willing to loose to get the next project done in 3.x.. for most companies.. that number is ZERO

    Exactly. Because unlike the AC you replied to, who probably lives in his parents basement and codes for his own use and not things that have 1000s (or more) users that rely on them, he has no concept of budgets and time constraints. Employees of real companies that actually make profit$ know that the company exists (and their job exists) to earn money, not play around with upgrading to the latest and greatest incompatible 'upgrade' every time something new comes out, and potentially breaking things that other people in the company (or worse, clients) rely on to do *their* work. Their lost time means lost money (and in the case of clients, perhaps even lost business because you cost them money by messing with something that worked fine).

  59. The Zen doesn't work by Ken_g6 · · Score: 1

    From The Zen of Python:

    There should be one-- and preferably only one --obvious way to do it.

    From TFS:

    Nathan Froyd adds "I think this list of reasons to upgrade misses the larger point in providing software for other people: You do not get to tell your users what to do...."

    This is one of the main reasons I hate Python: It's Guido's way or the highway. But, furthermore, Python 3.0 violates this principle as well: If there was one way to do it in 2.x, that way should continue to be the only way to do it in 3.0.

    --
    (T>t && O(n)--) == sqrt(666)
    1. Re:The Zen doesn't work by ebno-10db · · Score: 2

      But, furthermore, Python 3.0 violates this principle as well: If there was one way to do it in 2.x, that way should continue to be the only way to do it in 3.0.

      I think they should just admit it was a mistake and deprecate Python3. AFAIK many of its features have been backported to 2.7 anyway. Let's face it, if a major revision of a very popular language has been out for 5 years, and it's still not that widely used, there is something wrong with the new revision.

    2. Re:The Zen doesn't work by Anonymous Coward · · Score: 0

      "There should be one-- and preferably only one --obvious way to do it."

      Oh for christsake - the deluded imaginary word of the True Egomaniac

    3. Re:The Zen doesn't work by spitzak · · Score: 1

      It's the dropping of support for text in 8-bit strings that is stopping us.

      I tried for awhile but we were forced to make all our python api's take and return "bytes" objects, which do not print correctly. In Python2.x they will at least print if there are no bytes with the high bit set, which gets us some reasonable subset.

  60. Re:python sucks by sjames · · Score: 1

    In that case, remove /usr/bin/python and replace it with a link to python2.7. Then change the one script that actually needed python30. Really not hard.

  61. Re:python sucks by Arker · · Score: 1

    If you have one application that requires 3.0, and everything else is happy with 2.5, I would just link /usr/bin/python back to 2.5, and change the one program that doesnt work that way to call 3.0 explicitly, rather than changing ALL the other programs to call 2.5 explicitly. I assume that is what the GP meant.

    --
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Friends don't let friends enable ecmascript.
  62. Re:Why 2.6? Why not 3.x? by maharvey · · Score: 1

    Reason 1: Because I have a mission critical business app (not maintained by me) that runs on 2.x, so that's what's installed on my machine as the default. Of course I have 3.x too, but to use it I have to specify the version explicitly. It's extra hoops to jump through.

    Reason 2: Because I mostly use python as a fancy scripting language. For product development or serious lifting I use C. I don't particularly care if my version is 2.x, if it ain't broke don't fix it.

    Reason 2a: It's a flippin' scripting language. I don't want it to be more rigorous than it already is!

    Reason 3: Everyone else at work relies on 2.6. Someone else is already supporting those 2.6 installations. If I make a project for 3.x, now I'm on the hook for getting everyone to install 3.x alongside their 2.x, I have to write docs, and when they have problems I have to handhold them through it. No thanks, I'll use what someone else is already supporting.

    Reason 4: They are two different languages. I don't stop using C just because C++ and Java and C# exist. There is room on my system for multiple languages. Go ahead and develop whatever you want, but I will choose what I want to use. I have no obligation to learn a new language just because it makes you happy. You're the one who moved to a new sandbox, don't whine if others choose not to join you there.

    Reason 5: Python 3 is similar enough to be confusing, but different enough to be aggravating. Really I just don't care enough. I think I'd rather move to a whole new language than wrestle the moving-target anaconda.

  63. Other software by lymond01 · · Score: 1

    Pointing out the obvious: I update my python code to 2.7. Meanwhile, our giant contracted system that it don't manage runs only on 2.6. That is all.

  64. Re:python sucks by Anonymous Coward · · Score: 0

    Why didn't numb nuts just grep and sed and fix the problem with one command line and a RETURN key? Because he doesn't know what he's doing!

  65. Re:Python by ebno-10db · · Score: 1

    How good is a language when they must reinvent it for every major release? Python is a scourge. Use scheme.

    Is the Python mafia modding tonight? That's an opinion, complete with a solid point to make.

  66. Re:python sucks by Anonymous Coward · · Score: 0

    Python has a well-defined versioning scheme for interpreters which is documented in detail. In particular, it requires that python2 is a symlink to some version of Python 2.x, and python3 is a symlink to some version of Python 3.x; authors of Python code should author their scripts correspondingly. If someone wrote a 3.x script that starts with #!/usr/bin/python, then they are the problem, and you should whack them with a stick until they fix that.

    Also note that this spec requires that python be the same as python2 until further notice, which will happen in 2015 at its earliest. So, again, if you or your distro symlinks python to python3, then that distro is breaking things.

    As a user of a package written in Python, you are, of course, not at fault. But it's not a fault of Python language & interpreter developers, either - as you can see, they were well aware of the problem, and came up with a working solution. They can't really help it if distros (which are, ultimately, responsible for installing Python on your system) don't follow that solution, or if app developers who use such distros write bad code.

    Of course, that link you gave says: Created: 02-Mar-2011

    So prior to 02-Mar-2011, people using say python 2.5.2 (released in 2008) were not being "informed" to write their code using /usr/bin/python2, and so all that old code is now "improper" according to a spec released *3 years* after the code was written. No, while one might argue that won't change until "2015 at the earliest", it is still quite possible that code might well exist that uses /usr/bin/python expecting (and only working with) python2. In which case, one might ask - if the new 'standard' (post 02-Mar-2011) is to use /usr/bin/python3, why would the symlink *ever* change (2015 or after even)?

  67. Re:python sucks by shutdown+-p+now · · Score: 2

    So prior to 02-Mar-2011, people using say python 2.5.2 (released in 2008) were not being "informed" to write their code using /usr/bin/python2, and so all that old code is now "improper" according to a spec released *3 years* after the code was written.

    Any code written prior to the release of that PEP would be using #!/usr/bin/python, and the spec requires it to be a synonym for python2 for now, and at least for 2 more years (realistically, that change is probably going to be postponed for much longer). So someone using Python 2.5.2 in 2008, assuming they wrote the proper shebang, and assuming that the distro (which has no excuse for not following the PEP today) did things properly, will work fine.

    The problem that OP described was someone writing a script that requires Python 3.x, but using #!/usr/bin/python. Now I'll grant you that 3.0 was released in 2009, before the PEP, so there is some possibility that someone had a valid excuse - but in practice, given the slow uptake of 3.x, it is extremely unlikely that you'd run into a package that was originally written for 3.0 but not 2.7, and that hasn't since been updated for 3.1+.

    In any case, the symlinks are implemented by a particular distro. If that distro follows the PEP, then it's the job of package maintainers to ensure that the packages they provide have the corresponding shebangs. If the distro doesn't follow the PEP and do silly things like symlinking python to python3, then it's also their responsibility to ensure that any packaged Python software uses shebangs that match their convention (by patching the sources if necessary).

    Also, note that the PEP basically documented what well-behaved distros were doing since the release of 3.0. It's not really a long one, and that's because what it says is basic common sense.

    In which case, one might ask - if the new 'standard' (post 02-Mar-2011) is to use /usr/bin/python3, why would the symlink *ever* change (2015 or after even)?

    The idea with that PEP is that apps should try to be specific about the version of Python that they want, but that "python" with no version specifier should be whatever is the most convenient to the user, which, at some point in 3.x adoption, would become 3.x rather than 2.x. Ideally it should have been unspecified from the get go, but because there was no clear versioning scheme for binaries before that, we're stuck with python==python2 until Python 2.x dies completely. The 2015 date is obviously overly optimistic, but then that's why it's not a hard date, just an estimate. Still, at some point, 2.x will not be in use anywhere, and then we can change the link. Apps should still use python3, though, on the grounds that there may be a python4 eventually.

  68. Impressive by Chemisor · · Score: 1

    As a data point, I successfully transitioned Firefox's build system from requiring Python 2.5+ to 2.7.3+ and it was relatively pain free.

    Speaking as someone who has just spent two days unsuccessfully trying to compile firefox, I am impressed to the point of apoplexy.

    1. Re:Impressive by ColdCat · · Score: 1

      So true, I've so many problems with the Mozilla build process and Pymake, that I stop after my first successful compile.
      If it was easier I maybe had time to identify and patch the thunderbird bug I was annoyed about.

  69. Re:python sucks by fnj · · Score: 1

    Forgive me for pointing this out, I know I am an asshole for putting it this way, but as the others have essentially pointed out, " upgrading " /usr/bin/python outside of what the distro does for you is a bone headed mistake . You are free to install anything you want wholly within /opt or /usr/local and be guaranteed that in so doing you can't in any way break the OS or anything properly written to work with the OS. Most distros, or at least addon repos, have sanely designed packages like python2.4, python2, python3, etc, that can be freely added without breaking anything existing. The most they will put in /usr/bin is a symlink of python3 to wherever the newly instealled python3 binary is.

    Your prima donna "piece of software" that demanded python3, without giving you a side load of same so you would have no difficulties, is amateur crap, but it's easily fixed. Just edit the shebang lines of all the python scripts and change "python" to either the python3 symlink or the python3 binary.

    P.S. - don't think I would ever claim that I have never made bone headed mistakes in my life, even in IT work. We all do; getting them corrected is how we learn.

  70. Isn't Python embedded with many OSs by Anonymous Coward · · Score: 0

    At my last job I was working with FreeBSD circa 2000 and greatly appreciated anything I could find that worked.

  71. why I ditched Gentoo by Anonymous Coward · · Score: 0

    Old ass version of python was why I ditched Gentoo.

    So yeah, keep supporting/requiring those ancient versions of python, I'll just dump your ass and find something newer.

    Then there was the fact the developer fuckers were spending more time bitching about netiquette like top posting replies on their mailing list than they were actually coding.

    So um fuck Gentoo and fuck ancient versions of python, I have better things to do with my life.

  72. Re:python sucks by Anonymous Coward · · Score: 0

    I bet your idiot developers just expect gcc to be version 3.2 as well instead of checking what fucking version they are using.
    Also, find me a distro that defaults python to python3. I dare you.

  73. We've improved our cars by Anonymous Coward · · Score: 0

    Extensive ergonomic testing shows the pedals are in the wrong order. So we're putting the accelerator on the left side on all new models.

    Perhaps the exalted developers should have some respect for the users and stop breaking their programs. Yes, it's hard to make changes that don't break existing code. That's what separates the professionals from the amateurs.

  74. Re:python sucks by MarcoAtWork · · Score: 1

    why would you not use virtualenvs? I would never touch/use/do anything to the system installed python, anything I do is in a specific virtualenv with whatever version of python and assorted packages is needed, same thing with the system perl and perlbrew

    --
    -- the cake is a lie
  75. actually... by Anonymous Coward · · Score: 0

    I can always equate this debate to vegan v. meat. Why the fuck do vegans always have to make everything "taste like" something else. If it's so good wouldn't it be good on it's own merits? "Well it's almost like burger." No it's not. That's what Python v. C is. If it was so good it could stand on it's own merits, have it's own uniqueness other than, "Oh look, we can use indentation now instead of semicolons." Who gives a fuck? Really? All those semicolons over the years gave you carpal tunnel? I can tell you it's because you never left you parents basement, and it's not from typing. Again we are back to the "meat" of the situation, it's not the same thing. Alright, alright I got a little off topic there. If you are going to talk about versions of the the "meatless" variety, let me just say it's like an old girlfriend, sometimes you will upgrade and say, "How could I have ever been with 2.4!?", and sometimes it's like, "3.0 is my wife, but there will never be another 2.4, aahhhhhh yeah, what's that honey? I said Neville will be joining me for 2 pints at 4(p)!"

  76. because they're not running FORTRAN 66 by Anonymous Coward · · Score: 0

    If they stuck to good old FORTRAN 4, there wouldn't be these problems
    None of that newfangled FORTRAN 77 stuff with array indices that don't start at 1, and free format input/output instead of using FORMAT statements like God intended.

  77. It has since before python started by dbIII · · Score: 1

    it can also be made to do the same on Linux.

    I've never bothered about environment variables for it and it always seems to find the correct library some long as they are all on the library path. The DLL hell problem didn't even exist on linux before the first line of python was written.

  78. Python in a nutshell, really. by seebs · · Score: 1

    Every time I have a problem with Python, or something in it doesn't fit an existing and established workflow, or set of tools, the response is the same: "Why are you stupidly having requirements which we did not consider important in making our decisions?" I'm still expected to support some of the stuff I maintain for RHEL 5. Initial release, 2007. Therefore, Python 2.5 is the newest version that they could possibly have selected. And upgrading from one version of Python to another is not guaranteed to be stable. So anything I'm doing that has to run on RHEL 5 has to run on Python 2.5...

    And that's really nothing particularly horrible. Many coding standards still aren't entirely comfortable with reliance on features introduced in C99, let alone C11.

    --
    My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
  79. Counter point by kfsone · · Score: 1

    Why don't people replace their video card and CPU every 6 months? There are costs associated with those things, sure, but it only takes a small amount of work to pop open your case and drop in the new hardware and the reality is that you WILL save time and energy from each and every small improvement: you'll spend less time waiting for the PC to boot, etc, etc.

    Why don't people upgrade from Windows XP to Windows 7?

    Why hasn't Python committed all-out to 3?

    There are two main groups of Python users who are not going to upgrade:

    . Users who consume installed Python software, who can only be negatively impacted by upgrading Python because they have no recourse to fix the stupid crazy crap that goes wrong when you upgrade Python without being Pyknowing. Historically many users experience with Python is that it's the thing that suddenly starts generating errors when they do an update on their linux distro.

    . Users who have a large established based of Python code, which amounts to time and money expended on the Python version that works with their code, for these folks upgrading is largely frivolous when you consider the costs of re-testing and proving their source code, or the cost-risks of deploying it if they don't have sufficient testing infrastructure.

    The latter group have two paths they could take: Python 2.x, which is generally a "deprecated path"; upgrading to 2.x is basically busywork. Meanwhile, Python 3.0 is a pipe dream. Nobody wants to upgrade to Python 3.0 because the only people who believe in it are Pyvangelists. I don't mean Python 3's goals, I mean the Python 3 effort. It's a failure. It's not going to happen, people are too burned on it, it's been dragged out for 5 years. It's about as interesting to a company's bottom line as investing in Perl 6.

    --
    -- A change is as good as a reboot.
  80. One step further by Anonymous Coward · · Score: 0

    In this situation, you should'nt be installing your Python app in the first place. What if running your app causes something to go wrong?

    1. Re:One step further by Anonymous Coward · · Score: 0

      But... but... what if not running your app causes something to go wrong? How do you cope with that one?

  81. RHEL 5 & 6 come with python 2.6 or earlier by KritonK · · Score: 1

    Red Hat Enterprise Linux (and, therefore, CentOS, Scientific Linux, etc.) 6, which is the current version of the OS, comes with python 2.6. Version 5 of the OS, which is still supported, comes with python 2.4 and an optional python26 package, which installs python 2.6 in parallel with the default version. I assume that similar things are true for other long term support distributions.

    In these distributions, using python 2.7 would require building it yourself and install it in parallel with the system-supplied version. This would add to the porting problems, that others have mentioned, the cost of maintaining python yourself. Thus, until these distributions update python to version 2.7, it is good that project maintainers provide support for these older versions.

  82. don't fix what ain't broke by Anonymous Coward · · Score: 0

    Wikipedia:If it ain't broke, don't fix it

  83. Re: by Anonymous Coward · · Score: 0

    He said "deliver an up-to-date side-by-side version of Python" not "swap out the version that came with the system".

  84. Gratuitous change is too fast by Anonymous Coward · · Score: 0

    Projects introduce gratuitous change too fast. Developers can't keep up with it. Python 3 and Perl 6 are the best examples: The development world has mostly ignored them. Even minor versions come out too fast. I couldn't even tell you the difference between Python 2.3, 2.4, 2.5, 2.6, and 2.7 because my job isn't to keep up with Python minutiae. I use a dozen different languages, and the rate of change is just to fast to keep up. In the real world, you have to stick to a reasonable subset of a language's features and write code. C++11 is great, until you have to use an old cross-compiler that's stuck in 1998 on your code. Java 6 is great, until you have to deploy your software on an platform that's stuck on Java 5, or 4, or whatever. (I haven't even looked at Java 7 yet, and now there's Java 8 coming out. Too much change too fast. C++14 is DOA.)

  85. Firefox comes to mind by Anonymous Coward · · Score: 0

    The continuous removal of useful features is being done to make the developers' lives easier, not mine. My life only gets more difficult each time I need to do research and work merely to restore a basic feature which is now missing -- AND it usually ends up half-assed compared to the original feature. Similarly, the continuous changing and dumbing-down of the interface is being done to appease the developers and project managers, certainly not me.

  86. Re:Python by WillAdams · · Score: 1

    Turn it around and ask --- what are the programming languages / environments which have been:

      - stable
      - usable
      - useful

    over a long haul?

    What advantages does Python afford over such?

    --
    Sphinx of black quartz, judge my vow.
  87. Python todllers by sproketboy · · Score: 1

    Aww the Python toddlers just discovered something the Java guys understood in the 90's. Namely you need to retain backward compatibility to ease transitions forward into new versions. Nice to see you cought up finally.

  88. Upgrade-mania by MrL0G1C · · Score: 1

    I am so sick of everything wanting to upgrade all of the time.

    FFS my phone wants to constantly update a ton of crap that I'm not even interested in using, Occasionally I let it upgrade and it asks me to agree to some BS user agreement at which point I say no, fuck Samsung, why the fuck should I agree to some BS to use my phone?

    --
    Waterfox - a Firefox fork with legacy extension support, security updates and better privacy by default.
  89. The word "long term" is the clue by dbIII · · Score: 1

    Ever wondered about what came before 6? Think about it for more than two seconds then tender your apology.
    The "long term" was there to point out an old problem and avoid offending even the thinnest skinned of current programmers.
    At one time it was BASIC, then it was almost a copy of Pascal, and it ended up looking like Java. Long term means ancient history in programming.

  90. Re:python sucks by Anonymous Coward · · Score: 0

    I don't know much about python 3.x - looks like they broke the string library and after that I stopped reading

  91. Python has some serious problems ATM by Lproven · · Score: 1

    As per this incisive blog post from the end of last year (i.e. just under a fortnight ago):

    http://alexgaynor.net/2013/dec/30/about-python-3/

    --
    Liam P. ~ "Intelligence is a lethal mutation." (me)
  92. Re:python sucks by Anonymous Coward · · Score: 0

    He shouldnt have to do anything you fucking moron. No one should have to waste time renaming/repointing/grepping to work around what is essentially a bug with Python versioning. They devs of Python should fix their shit rather than give workarounds.

  93. Changes in API mostly by Anonymous Coward · · Score: 0

    We have a product that runs an old Python rev. The reason we are stuck on it is a critical part of the program relies on a feature provided by a 3rd party OSS library that doesn't work on the newer versions at all. It involved severe hackage that we didn't discover was used until the programmer was long gone - it always "just worked as spec'ed" so we never asked how - our bad but that's history now. Since then we've discover the hack is simply impossible to duplicate at all - we did create a work-around that involved going to a system call but it's not portable enough to generalize. We're planning to re-write the app in another language that supports the necessary feature more directly and simply instead.

  94. Three-year obsolescence? by whitroth · · Score: 1

    I just did a hack yesterday. One of our websites was running on perl CGI, and someone(s), years ago, inanely decided that they should write the logfile in cgi-bin. Now, selinux was extremely unhappy about that, so I moved the actual logfiles to /var/log/httpd, and made a symlink from the cgi-bin, and selinux is happy.

    Why is this relevant?

    Because, apparantly there are a number of perl cgi scripts for that website, and multiple places they write to the log from, and all of it's hard-coded, and one guy is (barely) starting to pick up, and we don't have a team to fix it. Budget for that? Hah. Hah. Hah.

    And this is true of most of the places I've worked for decades. Someone write out of college, who barely knows what error handling is, whose largest program was a few thousand lines, and has zero responsibility, either job-politically, or monetarily, to assre that WHAT IS RUNNING BETTER KEEP RUNNING, complaining about "why doesn't everybody update to the latestgreatestwhizbang!!!" can and should be ignored, unless you feel like explaining the facts of life to them.

    Hell, I'm trying (volunteering my time) to install some library software for an organization I belong to, and that's what it wants... and we're running an enterprise o/s (CentOS, since you ask), which doesn't *begin* to have the most current kernel, much less the versions of the utilities they want... having apparently built on the LATEST STUFF....

    I'd love to see all developers forced to test their own software on a computer one to two generations old, on a stable o/s, and *not* inside the organizational network.....

                        mark

  95. Re:python sucks by shutdown+-p+now · · Score: 1

    They didn't broke it, they fixed it. It had the side effect of breaking everyone who misused strings or didn't understand that ASCII is not the only text encoding out there, hence why you see a lot of flaming around.

  96. FORTRAN Re:OS versions by bbsalem · · Score: 1

    Yes, I know all about FORTRAN's longevity, and the stupidity of companies ignoring or short-shifting legacy. The company is out of business, now.

  97. Re:python sucks by spitzak · · Score: 1

    Bull. Python is the one thinking "ASCII is the only text encoding out there"

    Anybody actually paying attention in 2.0 would have changed the default encoding to UTF-8 with non-exception-throwing handling of errors (ie turning them into characters). The fact that a byte stream with any bytes with the high bit set will throw an exception at quite unexpected times and doing the most trivial thing (such as comparing to a "unicode" string constant) is bad and entirely due to Theo's insistence that ASCII is the only thing that exists.

    3.0 is marginally better in that it appears to at least acknowledge that UTF-8 exists, but makes a lot of other things worse. In particular now you cannot do any text manipulation without first doing something to detect UTF-8 encoding errors. I can't even search for an 'A' which 2.0 allowed me to do.

    This is a disgusting mess. And there is some problem with text in that it causes otherwise brilliant people, such as Theo, to turn into complete morons. I think the problem is that too many people's first interesting piece of software was learning "you can capitalize by doing string[n] = string[n] + 'A' - 'a'". This has then perpetuated the idea that somehow a "character" is important, that you must be able to get a "character" from any integer index, and that they can be substituted for each other. Try using english words (which are much more useful to humans than "characters") and you will see how pointless these assumptions are. I can assure you that software has managed to work with words, doing complex stuff like formatting them into paragraphs without losing a single one or breaking it in the middle, without these limitations. The same applies to "characters".

  98. Re:python sucks by shutdown+-p+now · · Score: 1

    I can't even search for an 'A' which 2.0 allowed me to do.

    But you can:

    Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> s = b'foo'
    >>> s
    b'foo'
    >>> s.find(b'o')
    1

    By the way, who is Theo (you've mentioned this name more than once already)? Do you mean Guido?

  99. Re:python sucks by sjames · · Score: 1

    That's purely a matter for the packagers.

  100. Re:python sucks by spitzak · · Score: 1

    That syntax for the quoted string does not work for UTF-8, and requiring the b for the find argument is broken because I cannot reuse code.

    Here is what I want (though I would prefer that 'b' be automatic and 'u' mean you want a "unicode" thing):

        s = b'fooæbar\x88\n'

    s now contains the UTF-8 encoding of æ and a newline at the end and also an invalid bit of UTF-8 in a byte with the value 0x88.

        s.find('a')
        s.find('\x88')

    These work to find the byte offset of the given match

        s.find('æ')

    This is a search for a 2-byte string containing the UTF-8 of æ.

    Yes I meant Guido, not Theo. Sorry.

  101. Re:python sucks by shutdown+-p+now · · Score: 1

    Right, b'...' only allows for ASCII. I have to say though that using UTF-8 in literals, or really anywhere in the source code, is generally rather frowned upon (not just in Python). But if you want to, you can still do something like 'fooæbar\x88\n'.encode('utf-8').

    The fact that bytes.find takes bytes, and str.find takes str, seems logical to me. Code that wants to deal with either bytes or str completely transparently and uses a literal (rather than accepting both the string and the substring as parameters, in which case the caller will provide matching types), should not be common. But you can still do it where you need it.

    In particular, if - according to your overall argument that strings should really just be treated as byte arrays - you always want substring to be based on byte values, then you can do type checks for any parameters that you receive, and if it's str, decode it to bytes.

  102. Re:python sucks by spitzak · · Score: 1

    you can still do something like 'fooæbar\x88\n'.encode('utf-8').

    That does not work as it will turn the \x88 into a two-byte encoding of U+0088.

    I understand that bytes.find() takes bytes and that bytes.find('foo') is an error. However having to add/remove the 'b' as code is reused it rather painful, and makes duck typing a lot more unpredictable. In addition it sounds like I cannot put unicode (such as '\u1234') into a bytes constant, making portability even more annoying as I have to hand-encode it into UTF-8 (having had to do this for Windows C source code I can tell you that is very error-prone).

    Although based on Python2.x, our C++ code with a Python api does exactly what you propose. All string arguments are examined and if they are what Python calls "unicode" rather than string/bytes then our own converter to UTF-8 is run. All strings returned to Python are using the "bytes" type (which is the same as str in 2.x). The main problem is that this return type will fail in Python3.0 as it is not automatically converted to Unicode, and we cannot convert to Unicode as we need to be able to return invalid UTF-8.

  103. Re:python sucks by rdnetto · · Score: 1

    It would probably have been less work to just change the default interpreter back to python 2.5, and edit only the 'one piece of software' that required python 3 to /usr/bin/python3

    The second bit wouldn't even be necessary - as far as I'm aware, the only distro that made python3 the default was Arch. Because python2 is still the default on most systems and incompatible with python3, most programmers working in Python 3 explicitly specify python3 in the shebang. (Using /usr/bin/python only is considered poor practice for this exact reason.)

    --
    Most human behaviour can be explained in terms of identity.
  104. Technically.... by Anonymous Coward · · Score: 0

    There were a lot of 'intermediate' standards in the interim where pieces of the C++ standards or TR1 were implemented, but not the whole document, leading to either earlier or later versions having ABI or API changes which may've broke code developed in the interim.

    I have some 1995 era C++ code for instance, which was pre-namespace and used templates, which has been a nightmare to attempt to refactor.

    Additionally there are other minor issues such as the changes to libc and libc++ headers such as the latter no longer including the 'equivalent' C headers by default.

    Lots of minor changes over years can lead to lots of major changes when you get around to attempting compilation or porting of 'legacy' code.

  105. What year was this in? by Anonymous Coward · · Score: 0

    Gentoo has supported slotted python for at least the past 3+ years.

    While they've currently dropped everything older than 2.6, it had been possible to install at least 2.4+ slotted and have every gentoo python package available cross-compiled for every version of python on which it could successfully run.

    Not to say there weren't some hiccups back in the python 3.0 days, but that was what... 4-5 years ago now?

  106. Re:People don't upgrade --missing modules in Py 3- by Anonymous Coward · · Score: 0

    I worked lately on a project using Python. I initially used Python3.x.
    I had to revert from Python 3.x to Python 2.x (perhaps 2.75), because some module/libraries were not available (ported) to Python 3.x
    Pyserial (and a few more) worked, but several modules were not available.
    So a push to port as many modules possible to Python3 is the way to full adoption !
    As simple as this.