Thursday, December 6, 2007

Roadmap to Factor 1.0

According to the Factor website, Factor 1.0 is coming out some time in 2008. That's pretty scary. 2008 is coming in less than a month, and we currently have no solid plan for how we're going to go about reaching 1.0. Depending on the amount of available time that contributors have over the next year, it'll take a different amount of time to achieve this goal. Nevertheless, I'm proposing a roadmap of development goals for Factor 1.0.

Figuring out the goals

We first need to figure out the exact goals for Factor 1.0, and how we're going to go about completing them. From the Factor homepage, we have a list of goals for Factor 1.0:
  • New object system with inheritance and multiple dispatch
  • Incremental garbage collection
  • Drastically reduce compile time
  • Continue improving existing libraries, such as databases, multimedia, networking, web, etc
  • Full Unicode support, Unicode text display in UI (in progress)
  • Better UI development tools
  • Get the UI running on Windows CE
  • Add support for Windows 64-bit and Mac OS X Intel 64-bit
  • Use kqueue (BSD, Mac OS X), epoll (Linux) for high-performance I/O
  • Directory change notification

This contains many different things, which will take a lot of work. For each of these tasks (or pieces of them), we need to decide who will be in charge of them and what a target date for completion will be. There are also other goals that aren't on this list, and we need to identify what these are.

One list item is particularly involved: Continue improving existing libraries, such as databases, multimedia, networking, web, etc. Right now, the libraries in extra/ are of inconsistent quality. We should set a standard for quality for things that are in extra/ and designate more experimental libraries as such, maybe by putting them in a different directory like playground/. We'll should have an audit of all the libraries in extra/ to improve them as much as possible and decide whether they should go into playground/.


By the end of this year (December 31, 2007): We need to decide, in more detail, how the path to Factor 1.0 will go. We need a full list of goals, a person assigned to each one, and a target date for completion. We also need to decide the terms for an audit of the libraries.

One-third through next year (April 31, 2008): We should be done with the library audit. All new libraries should be correctly sorted into extra/ or playground/. At this point, around half of the remaining critical features of Factor 1.0 should be done. Language features, like the form of the object system, should be completed and frozen.

Two-thirds through the year (August 31, 2008): This date is the target for all of the key features to be completed. After this point, we will focus on bug fixes, performance and more complete documentation. If possible, 1.0 alpha/beta 1 should be released, and further alpha/beta releases should be made through the year. Here, Factor's runtime should be frozen with no significant changes in implementation.

At the end of the year (December 31, 2008): By this date, if all goes well, we will release Factor 1.0, with no major additional features added after the alpha stage.


Here are guidelines that all vocabs in extra/ should eventually follow:
  • Each vocab foo should consist of six files: foo.factor, foo-tests.factor, foo-docs.factor, summary.txt, authors.txt, tags.txt
  • Every vocab's documentation should explain each externally useful word, and it should have a main article telling users where to start.
  • Every vocab's unit tests should be as complete as possible.

Eventually, some vocabs in extra/ and playground/ will be hosted outside of the main Factor distribution. But right now, the total quantity of Factor code is such that everything that's publicly distributed can be included. Of course, when more people start writing code that they refuse to put under a BSD-compatible license, we'll want to distribute that code separately.

This whole roadmap is quite optimistic, but I think it's possible if we focus on that goal.

Note: I wrote this without significantly consulting everyone involved with Factor, so if you have a problem with it, know that this doesn't form any kind of official policy (and please tell me).


Slava Pestov said...

The roadmap looks good. In addition to an extra/ freeze, we need to consider having a freeze on new language features (so that multiple dispatch and inheritance can go in before then) as well as a freeze on VM changes (I'm itching to implement an incremental GC; but we want to have ample time to debug such a change).

I applaud you for taking the initiative in putting a roadmap together. Now we just have to carry it out, which is the hardest part :-)

Anonymous said...

So the real goal for 1.0 is 2009 now?

Anton Tagunov said...

Too much of software has been released into the world broken because its creators had been pressed for time..