================== Forrester Research ================== Introductions: Python the language is represented by a small number of implementations. This survey reflects the characteristics of the most common three: cPython, implemented in ANSI C code and available anywhere standard C tools are provided. Jython, implemented on top of the Java Virtual Machine (JVM) and fully interoperable with the existing body of Java software, up to subclassing of Java classes and being subclassed by Java classes. IronPython, implemented on top of .NET and fully interoperable with the existing body of .NET software. Maintainability --------------- How easy are applications developed using this language to maintain? F14: Clean Syntax - easy to understand Can the source code be understand and parsed by non developers? Python makes conservative use of punctuation, using it in the conventional manner of operators common in the industry. It relies more upon its keywords for its syntax and has a philosophy of reducing unnecessary variability, by offering a single obvious way to code a particular construct. This is reflected in its use of whitespace indentation for enhanced readability, and freeing the developer from repetition by avoiding type predeclarations. These design decisions make Python known for being very readable. It has been said its source reads almost like the pseudo-code you find in textbooks, making it very easy to translate such algorithms directly into Python. F15: Modularity - ease of reuses How easy is it to reuse components written in the language? Python supports a powerful implementation of modules, arranged into a hierarchy of namespaces with a flexible specification of places to search. Modules may be a single file, a directory of files or a zip archive, located centrally or in various project-specific directories. This high level of component abstraction makes reuse very easy. F16: Library - support How comprehensive are code libraries, frameworks and examples that support common development tasks? Can a developer easily find existing examples of what they are trying to accomplish by searching the web or other reference materials? The standard library reference for Python along with a set of topic guides are available online. A rich source of examples to common design problems is the ActiveState O'Reilly Python Cookbook, available online as well as a published book of 800 pages. The cookbook is a collection of code snippets and techniques, with comments and ratings from the Python community. The Developer Shed site also has an extensive collection of developer articles about Python. http://docs.python.org/ http://www.python.org/doc/topics/ http://aspn.activestate.com/ASPN/Python/Cookbook/ http://www.devshed.com/c/b/Python/ Object Orientation ------------------ Is the language object oriented or have object oriented features? F18: Inheritance Does the language support inheritance? Python supports both single and multiple inheritance. Conventions in the Python community such as "ducktyping" and interfaces encourage the use of inheritance primarily for the sharing of implementation code, not interface definition. This is due to Python's support for name-based polymorphism where no inheritance relationship is necessary. F19: Interface support Does the developer have the option to define interfaces if desired? While the core Python language does not support formal interfaces, a module common in the community, zope.interface, provides a complete implementation of interfaces, including adaptation, invariants and an optional registry of component factories. http://wiki.zope.org/Interfaces/FrontPage F20: Classes Does the language support class definition? Yes, in Python classes are first-class types, retaining their metadata at runtime and providing powerful introspection features. Also supported are metaclasses, basically classes that at runtime produce classes tailored to a design need. One example of this would be a metaclass to query a relational database and generate access classes based on the metadata of the tables and columns found. Another example would be a metaclass that participates in a communications protocol and dynamically constructs class proxies when needed. F21: Polymorphism Does the language support polymorphic behavior? Yes, in a more powerful form than is common. Usually polymorphism and inheritance are closely related but Python's use of name-based polymorphism, e.g. where a method 'bark()' is invoked on a set of components that share no inheritance relationship, frees the developer to use them independently. F22: Generics Does the language support use of generics or "duck" typing? "Duck" typing refers to the explicit testing of argument types and inheritance relationships to control behavior. The term was coined by a Python developer and the technique is a very common one in the community. This testing, as stated, is explicit and there is an ongoing research effort to provide conventional generics, making the dispatch mechanism more implicit. Python supports operator overloading, within which these kinds of dispatching mechanisms can be applied. http://en.wikipedia.org/wiki/Duck_typing http://billmill.org/pygenerics.html F23: Field Encapsulation Does the language support encapsulation of fields? Yes, Python provides full encapsulation of fields, i.e. dot-name attribute access and manipulation. Reads, writes, lookup and deletion of fields can be easily intercepted. F24: Function/Method Encapsulation Does the language support encapsulation of functions/methods? Yes, via the __call__ special method, which catches attempts to call a data element and redirects it into an associated method, as well as function/method decorators, which can intervene in both the call and return aspect. Efficiency of syntax -------------------- How easy is it to extend the language to add new features? F26: Extensible Types Can a developer extend the language by adding new data types? Yes, in Python classes and types are unified, with classes being first-class types. This, along with the ability to subclass all built-in types, makes it easy to add new data types. And Python's support of metaclasses make it easy to generate new data types appropriate to a runtime occurrence. F27: Extensible Keywords Can a developer extend the language by adding new keywords? While the Python language itself does not provide control over keywords, the benefits of extension by keyword, such as specifying custom metadata about program elements, can be achieved in Python via use of metaclasses, function/method decorators (before/after-call intercepts) and docstrings (arbitrary text associated with an element and retained at runtime. F28: Extensible/Polymorphic Framework Can a developer extending or overriding any included frameworks? Yes, Python places only the barest minimum of restrictions on frameworks and modules, making fully available mutable namespaces which can be modified, extended or removed. Memory management/ Garbage Collection ------------------------------------- Does the language automatically do memory management and garbage collection? F30: Advanced Garbage Collection Does the language support advanced garbage collection algorithms? Garbage collection is an implementation detail. The cPython implementation uses reference counting, with cycle detection and breaking. It also has weak references, i.e. reference to objects that don't prevent collection. The garbage collector can be queried for objects still in existence, a collection cycle can be explicitly initiated, and cycles of uncollectable objects can be detected and explicitly broken. The Jython implementation uses the native garbage collection facility of Java. The IronPython implementation uses the native garbage collection facility of .NET. F31: Tunable Garbage Collection Can a developer tune the garbage collection capabilities? Garbage collection is an implementation detail. In cPython, the garbage collector can be turned off when needed, to avoid timing disruptions. The collection frequency/threshold can also be adjusted, In Jython, all of the underlying Java garbage collection capabilities are present. In IronPython, all of the underlying .NET garbage collection capabilities are present. Compilation ----------- F32: Is it possible to compile applications into binary or byte code for performance or packaging reasons? Application compilation is an implementation detail. In cPython, it is automatic behavior that referenced modules used by an application are automatically compiled into bytecode files, and then cached. There are several binary compilers for Python, the most well-known of which is Psyco. In Jython, applications are compiled into Java bytecode that can be packaged into jars with other Java modules and look the same as any Java program. IronPython does not yet have a compiler that generates external binaries or bytecode but leverages the JIT (just-in-time) compiler that underlies .NET. The .NET JIT makes IronPython one of the fastest Python implementations, in many circumstances. http://psyco.sourceforge.net/introduction.html Execution Characteristics ------------------------- F34: Support for concurrent execution Does the language support developing concurrent, multi-threaded applications Yes, Python has strong support for processes and threads, both the underlying operating system ones, and cooperative threading. In version 2.5 of Python, its generator functions were made bidirectional, providing support for full coroutines. There is also a well-developed package, named "twisted", for developing with non-blocking or asychronous concurrency. http://twistedmatrix.com/projects/core/documentation/howto/async.html F35: Debugging Is there a robust language debugging capability? Python comes with an integral interactive source debugger, the "pdb" module. It supports breakpoints (conditional and otherwise), single stepping at the source level, inspection of stack frames, source code viewing and evaluation of arbitrary Python code in the context of any stack frame. It is also accessible under program control and supports post-mortem debugging. The many IDE environments for Python also provide a complete debugger environment, leveraging the "pdb" module or providing their own. http://docs.python.org/lib/module-pdb.html F36: Cross-language invocation How easy is it to call APIs or services written in other languages using this language and how easy is it to invoke APIs or interfaces written in this language from other languages? Cross-language invocation is an implementation detail. The cPython implementation provides strong support for both embedding, i.e. calling Python within another language as a scripting or macro language, and extending, where Python can invoke functions written in another language. This aspect of Python is so important to the community that a separate manual is provided with each Python installation detailing how to do it. http://docs.python.org/ext/ext.html The Jython implementation, by virtue of being integrated into the underlying JVM, has access to and can be called by the existing Java Native Interface (JNI). The IronPython implementation, being a part of the multilanguage .NET framework, is also fully interoperable with those other .NET languages. F37: Runtime footprint (size) How large is the on disk runtime that has to be installed to run programs written in this language? The on-disk runtime size varies by implementation. For cPython, the interpreter executable is 2.6 MB For Jython, the Python jar file is 1.1 MB, plus whatever space your normal Java environment occupies. For IronPython, the Pythons-specific DLLs are 1.4MB total, across 3 DLLs, plus whatever space the .NET environment occupies, unless you're running Vista in which case you already have .NET installed. On top of each of these is very roughly 14 MB of Python source, for the complete standard library. This bulk can be compiled into bytecode and the source removed and/or compressed into zip archives, under some circumstances. Business Support ---------------- F39: Support for Mashups How easy is it to use the language to built Web sites or Web applications that combine services from multiple Web sites? Python has strong library support for acting in the role of client and server, and this shines in mashups, where during the serving of a page it must act as a client to retrieve data from other websites. The Twisted framework for Python is especially strong in this area. Besides support for both SOAP and REST formal service protocols, Python has several powerful modules for screenscraping or making sense of unstructured XML/HTML. Among these are BeautifulSoup and xmltramp. Mashups usually involve XML content at some point, and Python has several XML engines, with different philosophies of DOM manipulation. In Python 2.5, it ships with ElementTree, a module focused on XML. One Python-based site, a popular mashup of Digg, Delicious. Reddit and Slashdot, is www.doggdot.us. http://www.crummy.com/software/BeautifulSoup/ http://www.aaronsw.com/2002/xmltramp/ http://www.xml.com/pub/a/2006/01/25/scripting-flickr-with-python-and-rest.html F40: Support for business processes and workflow How well does the language support writing business processes and workflow applications? Workflow software should act as a component of vertical applications, work well with application integration software, be the "glue" for collaborative applications and fit into Web services architectures. Python makes a strong showing in all these areas but particularly excels in acting as a glue language that ties together other applications, with its extension/embeddeding capabilities and cross-platform/multiprotocol support. Key to certain business processes, Python comes with a decimal module for handling financial calculations with their precision needs and the Zope web framework has available several workflow modules. And by using Jython or IronPython, access is provided to any workflow components under Java or .NET. http://www.rexx.com/~dkuhlman/workflow_howto.html http://www.rexx.com/~dkuhlman/cps_wf_impl_procedure.html F41: Support for output creation Does the language support the creation of output in a variety of formats? Besides being able to produce output in XML/HTML, as mentioned for other questions, Python has support for generating high-quality reports in PDF, diagrams in SVG, and several 2-D and 3-D visualization packages, including PyOpenGL, tools for genomic DNA (FamilyJewels) and the Molecular Modelling Toolkit (MMTK). http://www.reportlab.com/ http://www.vpython.org/ http://dirac.cnrs-orleans.fr/MMTK/ http://visservices.sdsc.edu/downloads/python.htm http://family.caltech.edu/ Support for Web-centric apps ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ How well does the language support Web-centric applications? F43:Language supports creating rich user interfaces Does the language support creating applications with rich user interfaces (e.g. Ajax, Silverlight )? Python is fully supported as a scripting language by Silverlight, and many of the web frameworks for Python integrate support for Ajax, including use of the MochiKit AJAX toolkit. For non-web user interfaces, there are strong modules for wxWindows (wxPython), Gnome/GTK desktop (PyGtk) and KDE/Qt desktop (PyQt). http://www.onlamp.com/pub/a/python/2006/02/23/using-rest-with-ajax.html F44:Language supports creating personalization Does the language support creating personalized web content? (e.g. Portlets or equivalent) The Zope 3 web framework, written in Python provides a robust component architecture, including support for portlets, called viewlets by Zope. Zope has rich support for composing pages from the browser context and diverse views and subviews, including validating widgets. This allows easy variation, according to attributes of the visitor, of the content served, giving a personalized experience. F45:Language supports creating social web applications Does the language support creating social web applications. Example capabilities include chat, collaboration, forum boards, and editable content pages, RSS. Many collaborative applications have been written in Python, among which are YouTube.com, reddit.com, several wikis including wiki.python.org, bittorrent, a shared photo site www.tabblo.com, and Trac, a technical collaboration app. Python supports chat protocols such as Jabber, web frameworks for collaboration like Plone, http://www.aaronsw.com/weblog/rewritingreddit http://wiki.python.org/moin/RssLibraries http://trac.edgewall.org/ http://pythonology.org/success Support for Services ~~~~~~~~~~~~~~~~~~~~ How rich is the language support for a service based programming model? F47: Can produce and consume SOAP based services Can applications built in the language produce and consume SOAP based services? Yes, Python has several SOAP interface modules, of which one of the better known is SOAPy. Given either a WSDL or SDL document, SOAPy discovers the published API for a web service and exposes it to Python applications as transparently as possible. SOAPy is designed to support WSDL 1.0 and SOAP 1.1, and whatever version of SDL is being used to power Microsoft's TerraService web service. http://soapy.sourceforge.net/ http://pywebsvcs.sourceforge.net/ http://tinyurl.com/33cwmk http://tinyurl.com/2nztum F48: Can produce and consume REST based services Can applications built in the language produce and consume REST based services? Yes, several of the web frameworks for Python, such as Quixote, Gizmo(QP) and Twisted, support REST. Twisted especially supports client use of REST, in addition to acting as a server. http://www.rexx.com/~dkuhlman/rest_howto.html http://www.diveintopython.org/http_web_services/index.html Support for Web Service Standards ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ How complete is the language and framework support for Web service standards? F50: Supports Core Web Services Does the language support Core Web Services? Python supports core web services via the ZSI and wsdl4py modules, the latter released by IBM. http://pywebsvcs.sourceforge.net/zsi.html http://xml.coverpages.org/ni2002-07-17-a.html http://www.diveintopython.org/http_web_services/index.html http://www-128.ibm.com/developerworks/webservices/library/ws-pyth1.html F51: Supports Web Service Security standards Does the language supports Web Service Security standards? No. F52: Supports Web Services Management Does the language supports Web Services Management standards? No. F53: Provides Registry and Metadata support Does the language provides Registry and Metadata support? Python does have strong support for metadata represented in RDF, via the rdflib and 4rdf modules. The latter is part of 4Suite, a collection of Python tools for XML processing and object database management, including XML parsing, XPath expressions, XPointer, XSLT transformations and more. http://rdflib.net/ http://4suite.org F54: Process and Delivery Control Does the language support Web service Process and Delivery Control standards? No. F55: Transactions and Packaging support Does the language support Web services Transactions and Packaging standards? No. Data access features ~~~~~~~~~~~~~~~~~~~~ What data access features does the language support? F57: Support for relational data binding Does the language support mapping relational data into language constructs? Yes, the community has developed a specification (DB-API 2) for interfacing Python to relational databases. In addition, there are two mature frameworks, SQLAlchemy and SQLObject, for mapping relational concepts onto the Python object module. http://www.python.org/dev/peps/pep-0249/ http://www.sqlalchemy.org/ http://www.sqlobject.org/ F58: Support for XML data binding Does the language support mapping XML data structures into language constructs? Yes, XML is an extensively supported technology within the Python community, with several large frameworks for dealing with it. One of the major ones is 4Suite, which allows developers to take advantage of standard XML technologies rapidly and to develop and integrate Web-based applications. Another significant one, now included in the latest release, Python 2.5, is ElementTree. It provides a simple but flexible container object, designed to store hierarchical data structures, such as simplified XML infosets, in memory. It includes code to load XML files as trees of Element objects, and save them back again. http://pyxml.sourceforge.net/topics/ http://4suite.org/ http://effbot.org/zone/element-index.htm#interesting-stuff F59: Support for unstructured data Does the language support access and manipulation of unstructured data? Yes, one of the Python frameworks that provide access to unstructured data is the MayaVi Data Visualizer. It works for rectilinear, structured, unstructured grid data and also for polygonal data. And there is the SpamBayes module/application, one of the leading SPAM detectors, that performs Bayesian statistical analysis of unstructured data for classifying information. http://mayavi.sourceforge.net/ http://spambayes.sourceforge.net/ F60: Portability of code How easy is it to write portable code? Python has strong support for portable code, with several modules designed to mask environmental differences such as filesystem path specifiers, threading models and object serialization. Python also provides a portable set of bindings to various GUIs. And use of the Jython implementation gives Python the portability of the Java environment. Deployment and Installation ~~~~~~~~~~~~~~~~~~~~~~~~~~~ F62: Installation How easy is it to install an application written in the language? Very easy. There are general and platform-specific tools to create double-clickable installers. Applications can be delivered as Red Hat RPMs, Microsoft .msi files, and Mac OS X application/executables, with the associated GUI installation managers and drag & drop support. Python comes with the "distutils" module, to automate placement of all files in their installation locations as well as provide metadata describing the application. Jython applications can install as Java jars, and use the existing Java installation mechanisms. http://docs.python.org/inst/inst.html http://docs.python.org/dist/dist.html http://pyinstaller.python-hosting.com/ F63: Deployment How is the application deployed? Python has a concept similar to Java jars, called Python eggs. An application can be delivered in a compressed archive, with full dependency management against external modules. Eggs can be registered, with metadata, to package index servers, which can be in-house or public. Deployment is then pull-based in that a command is invoked to install a named package from the index server, either a specific version or "the latest". This command pulls down that package, along with any other dependencies and performs the installation. The Python community maintains a public package index server at http://cheeseshop.python.org/pypi/ which contains entries for 2,421 packages. http://peak.telecommunity.com/DevCenter/EasyInstall Strategy -------- F66: History How mature is the language? Python was created in the early 1990s by Guido van Rossum. The current release is version 2.5.1, with minor releases 2-3 times a year. There is a formal system of Python Enhancement Proposals (PEPs) and procedures for evaluating them, similar to the Request for Comments (RFCs) used to govern the infrastructure of the Internet. http://www.python.org/dev/peps/ F67: License Strategy Under what license is the language distributed? Each implementation of Python is distributed under a different license, with a separate license on the Python source library. An understanding of the various kinds of licenses can be gained at: http://www.opensource.org/licenses/category cPython is made available under a custom license from the Python Software Foundation, certified by the Open Source Initiative (OSI) as an open source license, and compatible with the Free Software Foundation's GPL. http://www.python.org/download/releases/2.0.1/license/ Jython is released under a Jython software license, which has not been certified by the OSI, but is an open one that includes source. http://www.jython.org/license.html IronPython is distributed under a Shared Source License, which allows it to be used for any commercial or noncommercial purpose, including derivative works. While distributing source, it is not, however, an open source license and has not been submitted to the OSI. F68: Copyright Who holds the copyright for the language's code? Each implementation of Python is copyrighted by a different legal entity. The copyright on cPython is held by the Python Software Foundation, a non-profit organization created in 2001 specifically to own Python-related intellectual property. http://www.python.org/psf/ http://www.python.org/doc/Copyright.html The copyright on Jython is held in aggregation by the community of Jython developers, each retaining a copyright on their contribution. The copyright on IronPython is held by Microsoft Corporation. F69: Platform Strategy What platforms are supported by the current release? cPython is supported on many platforms such as Linux, Windows/DOS, Macintosh but also including AIX, BSD, Nokia Series 60 and OpenMoko smartphones, PalmOS and more. A complete list is available at: http://www.python.org/download/other/ Jython is supported on any platform that runs the Java Virtual Machine, since it runs on top of that environment. IronPython is supported on any Windows platform that runs the .NET environment, as well as on the open source implementation of .NET called "Mono", which lets it run on non-Windows platforms.. F70: Governance How is the project governed? The intellectual property and financial affairs of the Python community are managed by the non-profit Python Software Foundation. Each implementation of Python has their own development team and culture, with the cPython implementation guiding the others regarding future directions for the language itself. Project management for cPython is based on rough concensus and running code, with ultimate pronouncements by Guido van Rossum, original creator of Python and Benevolant Dictator for Life (BDFL). There is a strong reliance on formal written proposals, called Python Enhancement Proposals (PEPs), which outline the benefits, drawbacks and alternatives of changes. The Python community is conservative and does not adopt new features without serious consideration and strong concensus. More details about Python core development are in http://www.python.org/dev/intro. Jython works closely with and takes many of its behaviors from the cPython group, but does not really have anyone with quite the longevity to be considered a BDFL, but sort of takes a BDFW (Benevolent Dictator for a While) kind of approach, with changing leaders over the years. IronPython is produced by Microsoft and does not accept external source contributions at this time. Decision making for small issues are tracked on CodePlex and picked largely based on the number of votes. Tools Strategy ~~~~~~~~~~~~~~ F72: Lifecycle tool support What applications are available to developers using this language that support application lifecycle for requirements, design, development, build, and test? Several of the IDEs for Python, Eclipse and WingIDE, provide support for some aspects of lifecycle work. A breakdown of applications is available at http://tinyurl.com/2q46gc. IronPython has some integration with the Visual Studio tools suite, leveraging what it provides. The Python community is very strong in unit testing, with several testing frameworks and extensive test suites used for many libraries and applications. And as an OO language, standard toolkits such as Rational software can be used to support application lifecycle. F73: Visual editor support What is the amount of visual editor support available? An extensive catalog of editors for Python is available at: http://wiki.python.org/moin/PythonEditors Many, such as emacs, vi, CRiSP, Eclipse, Epsilon, provide visual support for Python, with source colorizing and syntactic completion.. F74: IDE support What is the IDE support for the language? Python is distributed with a simple but deceptively powerful IDE, named 'IDLE'. The community also maintains a sizeable catalog of offerings, with both strong commercial offerings and free, at: http://wiki.python.org/moin/IntegratedDevelopmentEnvironments Some of the more well-known ones are Eclipse, WingIDE, KDevelop, Komodo, PyDev, Netbeans for Java, VisualPython for Visual Studio .NET. cPython, Jython and IronPython are all well-represented in the IDE marketplace. And there is a review of IDEs for Python, a bit dated from 2003, at: http://www-128.ibm.com/developerworks/linux/library/l-cpyide/ F75: Interactive support Does the language support interactive language execution from a command prompt? Yes, Python is very well-known for its interactive abilities. IBM has an article about the power of the Python prompt at: http://www-128.ibm.com/developerworks/library/l-pyint.html and out of the scientific community has come an enhanced Python shell called 'IPython', complete with integrated, interactive access to 2D and 3D graphic and data visualization features and interactive parallel/distributed computing to make apply those extra CPU cores or unused machines to your project. This enhanced shell is well documented and cross-platform. http://ipython.scipy.org/moin/ http://ipython.scipy.org/moin/IPython1 F76: Expanding adoption What is the strategy to expand use? With the hiring, by the Python Software Foundation, of a full-time Python advocacy coordinator 7 months ago, the Python community is working to accelerate the growth of Python, in business, science, university and K-12 educational sectors. The approach is grassroots or bottom-up, to strengthen the local community of usergroups, and encourage regional unconferences. These steps lower the barrier of entry, allowing those curious or those who have not yet received funding to check out Python. Along with this is an effort to build up an inventory of multimedia presentations, in the form of technical podcasts and screencasts, and reusable slide presentations that be shared among usergroups and classroom instructors. And for the IT departments, we're creating a set of whitepapers that can be circulated, targeted at specific industry sectors or technology domains. F77: Value to developers What is the value of the language to developers? "Learn once, use everywhere": web apps, GUI apps, command line scripts, systems integration glue, wrapping libraries from other languages; cross-platform; scales from quick and dirty tasks to large complex systems. "It fits your brain": empowers the developer to think in the problem space instead of the solution space, letting him concentrate on the application, rather than managing memory and trivia. Python lets developers work more efficiently than other languages, by virtual of its practical syntax which emphasizes elegance and clarity through minimalism, and is a great teaching tool on its own. "Batteries included." comes with an extensive, mature standard module set and a rich selection of third party modules available around the Internet, both cross-platform and platform-native. Jython and IronPython also let a developer leverage existing modules in the Java and .NET environments. "Concise and readable": maintainable, easy to collaborate with other developers, everything does something, no boilerplate fluff. "Accessible": to a diverse range of developer skill levels on a team, from beginners who are quickly productive to experienced developers who need advanced concepts. A developer doesn't have to know all the language to do powerful things. Interactive testing and exploration of ideas and great use of introspection. F78: Development plan Does the language have a formal defined release plan? Each implementation of Python has its own release plans. However, release approaches and guidelines have been documented in the Python Enhancement Proposals (PEPs) archive at: http://www.python.org/dev/peps/ In particular, check out #6 (Bug Fix Releases), #101 (Doing Releases) and #102 (Doing Micro Releases). For cPython major releases occur approximately every 18-24 months, with minor releases roughly every 6 months. For Jython, release plans are being formalized with the team preparing to put out its first major release in several years. For now, major releases occur when they are ready. For IronPython, release plans are in flux now but during development of v1.0 an alpha/beta was typically shipped every 3-4 weeks, with the source tree being made available on each check-in. Major releases are made when they are ready, not on a specific calendar. F79: New features How many new major and minor features were added in the last release? Features added differ by language implementation. The most advanced release of the three is cPython 2.5.1. Documents are kept online that summarize the highlights of each major release, with the one for cPython 2.5.1 being: http://www.python.org/download/releases/2.5/highlights For that release there were roughly 8 major features and some number of minor ones to the standard library. Jython is catching up in features to cPython, most recently those in v2.2. IronPython is being aggressively developed to match the features in cPython v2.5 as well. Market Presence --------------- F82: User Adoption How much is the language used? Since Python is open source and freely distributed, it is hard to come up with reliable numbers. It is also bundled with many operating systems such as Linux and Mac OS X. Companies have stated at conferences that they consider Python a strategic, secret advantage. One unsubstantiated estimate extrapolated from various Internet resources is 900,000 to 1,500,000 developers. http://wiki.python.org/moin/WellKnownPythonPrograms http://www.python.org/about/success/ http://opensource.sys-con.com/read/368040.htm F84: Number of active participants in language development How many committers to the core does the project have relative to the scope of the project? Each implementation has their own team, the characteristics of which can be looked up on sourceforge.org and ohloh.net. For cPython, 92 people have had commit privileges over the life of the implementation, with 51 of them being active in the last year. For Jython, there are 16 developers, of which 5 of them are active committers. http://www.jython.org/Project/contributors.html For IronPython, there are 2-4 core developers and 2-4 test developers, internal at Microsoft. The numbers fluctuate according to how you draw the lines about IronPython versus .NET and its other subsystems on top of which IronPython is built. F85: Bug reports How many bug reports have there been for the latest release? For cPython, a nice graph of the bugs opened and closed over the past year can be seen at http://tinyurl.com/26wqus. From the graph, roughly 75-100 bugs are closed each month F86: Email Postings How many email postings have there been (including developer and user lists) in the past six months? On the central Python site, www.python.org, there are 88 mailing lists in various degrees of activity. The core developers of the language talk on python-dev with 3,135 emails in the past 6 months and those using Python on python-list, with 25,425 emails. For Jython, the developer list has received 715 emails, and users list 507 emails, in the past 6 months. For IronPython, the public discussion list has received 776 emails. F87: Communication and collaboration How much communication occurs within the community? Besides email postings, what other forms of communication occur within the community? What forms of collaboration are used? The Python community has a strong base of instant message communications, much of it on IRC but also on jabber and other nets. There are several annual conferences; PyCon in USA, EuroPython, OSDC, PyCon Brasil and PyCon UK and French Python Days. And there are face-to-face usergroup meetings, usually monthly, around the world, with a recent rise in regional 'unconferences'. F88: Language Ecosystem What is the strength of the language's ecosystem, including related external projects and their updates, libraries and their updates, new tools? On sourceforge.org there are 3,307 projects that make use of Python. The community index of reusable packages currently has 2,421 entries. By way of example, below is a list of projects that use just one embedding/extension framework. http://www.boost.org/libs/python/doc/projects.html F90: Documentation What documentation is available? Are there manuals available? Technical documentation, specifications, etc? Python is distributed with a complete set of manuals, about the language, each of the modules in the standard library, extending and embedding Python with C/C++, and installation/distribution support of final applications. There is also a rich set of answers to frequently asked questions, as well as guides for getting started with Python. For in-depth technical explanations, the online Python Enhancement Proposals (PEPs) collection has very good coverage of new features and changes to the language, with justification for their addition and the alternative approaches that were considered along with the tradeoffs. http://docs.python.org/ http://www.python.org/doc/faq/ http://wiki.python.org/moin/BeginnersGuide http://www.python.org/dev/peps/ F91: Training How much training is available for the product, either provided by the project, a corporate sponsor, or third parties? The community maintains a registry of over 15 training organizations around the world at: http://wiki.python.org/moin/PythonTraining In addition, some of the Python conferences offer half/full day training sessions, with plans to increase their availability further due to strong demand. F92: Publications How many books are available that provide information about the product? There are too many books about Python to meaningfully summarize, many written in national languages and for the myriad frameworks available for Python. The community maintains a roster of available books at: http://wiki.python.org/moin/PythonBooks F93: Vendor adoption What is the vendor support for the project? While the Python language as open source is freely available, it is also bundled by vendors with operating systems (Mac OS X, Red Hat, SuSE, Ubuntu and other Linux distributions), and IDEs. The IronPython implementation of Python is supported by Microsoft. http://www.activestate.com/products/activepython/ http://www.pythonology.org/ Services ~~~~~~~~ F95: Commercial support How many companies offer end user support for the product? Is there one company primarily identified with the project that provides end customer support? Python has a vibrant network of consultants and companies who support the language in the field, as well as offer training in many cases. There is not just one company associated with Python, which gives to end users a strong network of support and giving them choices. The online Python community is also very supportive of end users, via mailing lists and instant messaging. With its global nature, help is available 24 hours a day. F96: Systems Integrators How many systems integrators use the language in application development? Many system integrators consider Python a secret, strategic tool and therefore firm numbers are hard to come by. Many of the Linux distributions rely on Python for their configuration/installation tools. Some of the companies that use it are Google, NASA, Red Hat and HP, as well as Lawrence Livermore labs. Also making it difficult to quantity is Python use in diverse domain areas, from games to scientific visualization to web applications and core system tools. http://www.pardus.org.tr/eng/projects/comar/PythonInPardus.html http://hplip.sourceforge.net/about.html Ubiquity ~~~~~~~~ F98: Web visibility How many Google, Yahoo!, and MSN hits? Google: 61,000,000 hits Yahoo: 16,700,000 hits MSN: 1,320,090 hits F99: Application Scenarios For which of the following types of applications is the language typically used? [X] Serving Web content [X] Business processes [X] Relational database access [X] Scripting system administration tasks [X] Manipulation of 2D graphics [X] Manipulation of 3D .. Local Variables: mode: rst mode: outline-minor End: