[sugar] Sugar 1.0 roadmap
Marco Pesenti Gritti
mpgritti at gmail.com
Thu Mar 13 08:13:21 EDT 2008
Hello,
I spent some time writing down the goals and the minimum requirements
for a stable Sugar release. It's a work in progress and I'm looking
forward for everyone's feedback!
Marco
---
1.0 (Draft 1)
== General goals ==
* Implement the essential UI features, sufficient to provide a good user
experience and to show off the innovative aspects of the design.
* Ensure quality by extensive community testing, mandatory code reviews,
automatic code checking and testing.
* Provide a stable API to activity authors, which make it easy to interact with
the system services and to write HIG compliant activities.
* Define and document the platform, roll out the plans for the components which
are not yet available, stable or satisfactory.
* Allow the community to participate to the core development and to write
activities with a very limited bootstrap effort.
== Performance ==
* Improve startup time down to something between two and three seconds for a
basic activity.
* Make switching between views instantaneous. The frame and the zoom level
animations should always be fluid.
== Toolkit ==
* Full review of all the modules, freeze API.
* sugar. Make env activity specify, move the path helpers from sugar.activity in
here, probably move it inside sugar.activity. Move network inside
sugar.network, assuming it's still useful. Drop profile, use whatever
configuration system we adopt instead. Drop wm. Move util in sugar base, drop
stuff which is not generally useful, split up the module. Ship libsexy python
bindings instead of our own copy of the entry. Make the key grabber private
to the shell (or handle keys in matchbox if we switch to mb2).
* sugar.activity. Factor out the helper classes from the activity module. Review
activityhandle and try to rationalize and clarify the identifiers story. Drop
the registry, keep the related functionalities exposed as a shell service.
Factor out bundlebuilder to its own git module.
* sugar.graphics. Use gobject like API consistently, in particular gobject
properties instead of constructor parameters. Extend the interfaces to match
the full UI requirements. Do not subclass gtk widgets when not strictly
necessary, instead work upstream whenever it's possible.
* sugar.presence. Degobjectify and provide asyncronous interfaces. Expose
wrappers over the DBus service *only* for functionalities which are frequently
needed by the activities and which are better exposed through a python API.
Probably rename to sugar.network.
* sugar.clipboard. Make it private to the shell.
* sugar.datastore. Degobectify, factor out the bundle specific bits. Make
asyncronous where necessary. Expose only the functionalities which are
relevant for activities and which are better suited by a python API.
* sugar.bundle. Make most of it private to the shell/journal (once they are
merged in the same process). Move the activity relevant bits in
sugar.activity.
* Complete the API documentation and provide an introduction/tutorial.
== Development ==
* Maintain packages for the major distributions. Fedora and Ubuntu are being
worked on. We need to enhance and document our release process, have clear
modules maintainers, coordinate the core components releases, provide source
tarballs and release notes.
* Start packaging activities and build them in the Fedora build system. On the
first run (in a standard distribution), they will be symlinked inside the
user activities directory, so that they can be managed as xo bundles. Even
when deleted they should be available from "get more activities...".
* Create a sugar-core git module containing, as submodules, the various
services, the toolkit and the shell. Provide python scripts to build, run
and help maintenance of the modules.
* Create a sugar-activities git module containing, as submodules, a set of
blessed activities. They will be either built and run in the system sugar
installation or in the one compiled from the sugar-core sources.
* Establish a regular weekly or bi-weekly IRC meeting encouraging the
participation of contributors and activity authors.
* Open up the UI design team. Get external designers involved, get feedback from
teachers and kids. Publish mockups and UI ideas early for the community to
comment and get excited about. Spread our ideas in the free software
community, particularly GNOME, to ensure the platform evolves in a way that
is friendly to our User Interface goals.
== Quality Assurance ==
* Document and consolidate the patch review process. Distribute the review
duties to ensure they are done timely.
* Publish a reference pylint configuration, apply it to the whole codebase and
fix the reported issues. Require the code to pass pylint before submitting
it for review.
* Form a community driven bug squad to help with testing and bug triaging, both
on the XO version of Sugar and on other distributions.
== Platform ==
* Datastore. Lots of work to be done to sanitize interface and implementation.
Unclear if it would require a full rewrite or if it can be conveniently done
by refactoring. A list of improvements and required new features, in no
particular order:
1 Minimize the copy of files while keeping the API simple and clear for
activity authors.
2 Better support for activities which needs to keep the file around during all
the life cycle of the activity (a media player, for example).
3 Separation between actions and documents. Actions are the frozen state of
an activity and can reference one or more documents.
4 Support for documents versioning, backed by differential storing.
* Choose a configuration system. gconf-dbus or dconf (status?) are possible
candidates, generally it looks like a service accessed through a DBus
interface would fit our needs, but see what the security team has to say
about it.
* Settle on a "free form" graphic toolkit. There are several possibilities.
1 Turn hippo into a mature canvas, add support for focus and accessibility.
Make it more friendly to layout-free use cases. Document it properly.
2 Experiment with goocanvas. See if the layout system can fullfill our needs.
3 Adopt a web based canvas, either firefox through pyxpcom and javascript, or
webkit gtk. Can it cover layout-free use cases?
* Provide a better default build system for bundles. It should be independent
from the toolkit and packaged by distributions (it could also just be an
extension of distutils or setuptools, possibly). It should support bundling
of external libraries and native code compilation.
== New Features ==
* Control panel providing essential customization, at minimum expose the
preferences which are currently supported by the command line version.
* Ability to share journal entries by sending them to a single xo.
* Browse activity. Global bookmarks, address autocompletion, improved
performance and memory use.
== Usability Improvements ==
* Shell redesign as specified by http://dev.laptop.org/go/Designs (essential
features, no regressions from Update.1).
* Journal redesign as specified by http://wiki.laptop.org/go/Designs/Journal
(essential features, no regressions from Update.1).
* Keybindings. Provide accelerators for all the activity toolbar actions. Key
navigation between activities. Key navigation inside the free form views
(Journal, Mesh, Groups, Home).
== Bugs ==
* When opening a journal object with a different activity we need to fork and
use a different activity_id. No good solution in a non-versioned world, since
even read-only activities might change the state and hence require a copy,
with the related waste of space.
* Implement session handling, probably by reusing gnome-session (rewrite being
worked on by Nokia in a branch). Our requirements are very simple but there
is a lot to gain in reusing the standard X session mechanism (or whatever
is used in the future by GNOME applications).
* Make activity launching a service so that we can safely allow activities to
launch other activities.
* Remove the need to set custom X properties to facilitate activity developments
in other languages and toolkits.
More information about the Sugar
mailing list