One of the interesting sessions held this morning was entitled "Defining a stable API and docs for desktop development", in planning for the Ubuntu 12.04 LTS release next April. The official notes from this documentation / stable API session can be found on this web-page, but key items include:
- Improving the current developer.ubuntu.com portal so that it's more visually integrated and attempt to make more of the generated documentation in a standardized format, especially for the intermediate data.
- Provide better Ubuntu API documentation by publishing new coding standards and that all API documentation should have included code examples. API documentation should also move out of Wikis and into source packages so that they can be included on the Ubuntu developer web-site. To further demand greater documentation, they're also looking at generating a list of undocumented public methods/classes/functions and then to automatically file bug reports about these undocumented interfaces.
- Defined as part of the Ubuntu platform APIs are GNOME 3, GObject, libunity, libappindicator, GSettings, and Ubuntu One.
- In terms of a stable API, Canonical is looking at defining a stable API for desktop libraries and to keep that stable for API calls. "Don't think only to amateur developers, think also to professional companies. If you've investigated a little, you'll know that one of the reasons why they don't develop for Linux is why the libraries and API often changes from a distribution to another and from a release of a distribution to another." (Of course, if Canonical tried for a stable Linux kernel API or any other low-level APIs, they would have a hell of a time making that happen. This is mostly about the highest-level desktop APIs.)
- At a bare minimum for a stable API, they are looking at having developers announce whether their API are highly unstable and that no backwards compatibility is broken without "a long, known deprecation period."
- When releasing new libraries, Ubuntu plans to ensure there are API bindings available for languages such as C/Vala, C++/Qt, and Python.