Note that though this is worded in the future perfect tense, it is only a draft;
I'm looking for feedback and comments from the community before the core
developers and I post a the final version of this document (which I will do
over the weekend).
What's will be in 1.0?
======================
The primary reason we've not yet released 1.0 is the long feature
wish-list. We need to balance this list of features against the need
for a timly release and speedy process. To that end, we'll categorize
all the features of 1.0 thusly:
* Must-haves: features that, if not completed, are worth delaying the
release. That is, if the work on this list is not completed by a
release date, we'll push the date.
This of course means that these features are the "A" features, and we'll
ask anyone who can help to focus on these features *first*.
* "Maybe" features: things that *should* be in 1.0 and should be worked on
in the run up to the release. If, however, features on this list aren't
completed, they will be dropped.
* "No" features: things that specifically will *not* be in 1.0, and which
we'll ask developers not to focus on. We need to trim down to hit dates,
after all.
Must-have features
------------------
1. ``newforms-admin``.
It's clear from discussion on this list that most consider a release without
``newforms-admin`` to be a bad idea. Further, ``newforms-admin`` is nearly
done; we've already started talking about merging it to trunk.
2. Replacement of ``oldforms`` throughout Django.
Nothing in Django 1.0 should rely on the deprecated ``oldforms`` package.
We'll need to replace ``oldforms`` usage in generic views, and in
``django.contrib.auth``
``django.contrib.comments`` still uses ``oldforms`` as well, but there's
special situation here; see below.
3. Making Django 100% WSGI compliant.
This simply involves fixing ticket #285. We've delayed doing this to avoid
the backwards-incompatible change, but we must make this change before 1.0.
"Maybe" features
----------------
Again, these are features that *should* be in 1.0. In most cases, they're
actively being worked on by members of the development community and simply need
focus by committers (more about how that process will work below).
These features are arranged in *rough* order of importance.
1. Signal performance improvements (#6814).
2. Large file uploads (#2070).
3. ``INSTALLED_APPS`` refactoring (i.e. ``app()`` objects) (#3591).
4. File storage refactoring (#5361).
5. Model-level validation (#6845).
6. Full ``GenericForeignKey`` support in newforms-admin (#4667).
7. Land GeoDjango as ``django.contrib.gis``.
8. Many-to-many intermediates (#6905).
9. Fix all known bugs preventing Django from running on alternate Python
implementations. In practice this means fixing any bugs filed before 1.0 beta
from people working on running Django on an alternate VM.
10. De-cruftify custom template tag loading (including removing custom template
tag ``__path__`` hacking) (#6587, etc.).
11. Better support for controlling middleware ordering (#3591).
12. Syntax for self-referencing fields in queries (#7210).
13. Finish documentation refactoring.
Features not in 1.0
-------------------
Unfortunately, the only way to get this done is to say no a lot. Let's start
now:
1. Aggregation support. Although this is a Summer of Code project that's looking
*very* promising, the timeline for SoC won't fit with the aggressive schedule
we're setting for 1.0. Further, it's a "dangerous" change in that it modifies
parts of Django's query engine, and that needs to be rock-solid for a 1.0
release.
The good news is that it'll make a kick-ass 1.1 feature!
2. Any other additions to ``django.contrib``. Though there are many nice
candidates out there, we simply don't have time to roll them into Django
in time for a release. We'll come up with a "contrib process" post-1.0
and start looking at this then.
3. Any additional database backends. Again, the overhead in integrating a new
database backend is too much. These will need to remain external backends
until after 1.0.
4. Any features not on this list.
We want to ship bug-free, so we'll dedicate as much of our time to bug
stomping as possible. This means that feature requests will need to be
deferred.
Schedule
========
Django 1.0 will be released in early September.
The general release process will be:
* An alpha release containing all must-have features, but likely not
bug-free. We'll push hard to have all the must-haves done in time
for ample testing.
The alpha release will also promote any "pending deprecation" warnings to
full-blown deprecation warnings.
* Two beta releases.
All "maybe" features must be completed by the first beta; after that,
Django will enter feature freeze for about a month while we kill bugs.
* At least one -- and hopefully only one --release candidate. The candidate
release will mark a total freeze (as well as a string freeze for
translators); only outright bug fixes will be accepted past this point.
* A final release.
* A big fucking party.
We will hold development sprints in between each release to focus on the next
release.
Dates
-----
July 10-12 ``newforms-admin`` sprint in person at EuroPython and around
the world in IRC.
July 18 or 19 Push to 1.0 alpha sprint in the San Francisco area, and in IRC.
July 20 **1.0 alpha.**
August 1 or 2 Push to beta sprint in Lawrence, and etc.
August 5 **1.0 beta 1.**
August 8/9 Push to beta 2 sprint, location TBA.
August 12 **1.0 beta 2.**
August 15/16 Release candidate sprint, location TBA.
August 19 **1.0 rc 1.**
August 22/23 Final release sprint, location TBA.
August 26 Earliest possible 1.0 release date, or perhaps rc2.
September 2 **1.0**
All the releases until 1.0 will be "snapshot" releases: we won't be backporting
fixes -- even security fixes -- but will just be fixing bugs in the next
release.
Process
=======
Each feature on the list (both "must-have" and "maybe") gets a "lieutenant" (to
steal of term from the Linux community) and a committer assigned. It's OK if
this is the same person, but the idea is that one committer can keep an eye and
commit from patches from a number of trusted lieutenants. In most cases, the
features on the todo list have obvious lieutenants; we'll need to assign missing
ones and also committers. I'll start putting together this list tonight; right
now it's mostly in my head.
James, as the release manager, will be in charge of keeping the schedule. He'll
keep track of who's working on what issues so that bug reports can be
efficiently routed; he'll also nag, cajole and (if necessary) berate developers
who are in danger of missing deadlines.
Once 1.0 is out we'll appoint a "version manager" (thanks for the idea, Rob).
This person will be responsible for maintaining the 1.0 release series, which
means backporting security fixes and "important" bugs and releasing 1.0.1, etc.
Similarly, as soon as we have a volunteer we'll appoint a 0.96 version manger
who will do the same with 0.96. We'll continue to support 0.96 until 1.1 ships.
With the 1.0 release, however, we will stop support 0.95 and earlier. This is
somewhat flexible; if someone has a stake in one of those older versions we'll
happily let them continue to maintain those releases, but if nobody steps up the
core team won't be able to do it.
--------------------------------------------
Comments are, of course, highly welcome. Fire away.
Jacob
Jacob - unless I'm going blind, you've missed out the 'below' section
that this refers to.
Russ %-)
You are not blind; I, however, have mad wicked copy-paste skillz. Ahem.
On comments
-----------
``django.contrib.comments`` is a bit of special case here: ideally, Django 1.0
will ship with *no* core use of oldforms. However, refactoring the comment
system -- not just replacing forms -- is overdue, and is the subject of a Summer
of Code project.
So we'd like to deal with that situation a bit specially. I've unfortunately not
had a chance to ask Thejaswi (the student working on comments) or Jannis (his
mentor) about this, so obviously they'll need to be OK with the idea. But,
assuming this works, I'd like to do the following:
August 11 is the suggested pencils down date for GSOC. This means that if
Thejaswi is on track, he will be completed around the time of the beta 2 freeze
date. July 14 is the midterm evaluation date for Summer of Code; we should be
able to get a good idea then whether completion on schedule is likely.
If the midterm evaluation says that the project is going badly, we abandon ship
and paper over the problem by simply replacing the form components with
newforms.
If the midterm evaluation is positive -- which I expect it to be -- we work on
the assumption that it will be merged around beta 2 (or earlier, if Thejaswi has
something ready). We encourage people to push newforms-comments pretty hard,
especially during sprints.
If we get to August 11 and we don't have a newforms-comments release candidate,
we can simply release with oldforms comments: it'll be annoying but not a
deal-breaker.
This does mean newforms-comments will be a late feature to the trunk (although
only 3 weeks after the feature cutoff for other features), but if we encourage
testing in its own branch, we should be able to mitigate the risk. I would also
hope that the last 3 weeks of GSOC development would be mostly bugfixing anyway,
rather than substantial changes.
[With thanks to Russ -- the idea's originally his, and most of the
above is coppied out of something he wrote yesterday.]
Jacob
On Wed, Jun 11, 2008 at 10:03 PM, Jacob Kaplan-Moss
<jacob.ka...@gmail.com> wrote:
> * "Maybe" features: things that *should* be in 1.0 and should be worked on
> in the run up to the release. If, however, features on this list aren't
> completed, they will be dropped.
I think I know what you mean here, but "dropped" sounds an awful lot
like an all or nothing deal: either it makes it into 1.0 or it never
makes it at all. It's probably best to clarify that "dropped" just
means "dropped from 1.0, to be added in the next release after it's
completed." Yeah, it might be obvious to some of us, but a lot of
people could read it the wrong way.
-Gul
One of the first things I looked for when I got interested in Django 1.0
was look for the milestone page in trac. I know that there are similar
things in the wiki page, but the status on several of the tickets listed
seem to be stale.
Hopefully my curiosity represents curiosity of others, and I am doing
what I can to push along 1.0, although I'm still getting up to speed on
the development process. :)
Cheers!
Jeff Anderson
Indeed. I expect that anything on that list that doesn't make it into
1.0 will be in 1.1.
Jacob
Also, it's worth noting that because contrib.comments is an
application rather than a core part of Django, it will be easy to keep
it available for those who want to stick to it, and if someone in the
community wants to offer continuing support for it I wouldn't be
averse to letting them do so (though of course django.oldforms will
eventually disappear, at which point any third-party maintenance
effort will probably need to do some porting).
--
"Bureaucrat Conrad, you are technically correct -- the best kind of correct."
On Jun 11, 2008, at 8:03 PM, Jacob Kaplan-Moss wrote:
> 2. Replacement of ``oldforms`` throughout Django.
>
> Nothing in Django 1.0 should rely on the deprecated ``oldforms``
> package.
> We'll need to replace ``oldforms`` usage in generic views, and in
> ``django.contrib.auth``
Just wanted to point out that the newforms-admin branch has already
ported django.contrib.auth to newforms.
> * A big fucking party.
A *really* big fucking party ;)
Brian Rosner
http://oebfare.com
Thanks,
Eugene
This is a call for comments on the proposed Django 1.0 roadmap and schedule.
......
Must-have features
------------------
2. Replacement of ``oldforms`` throughout Django.
Nothing in Django 1.0 should rely on the deprecated ``oldforms`` package.
We'll need to replace ``oldforms`` usage in generic views, and in
``django.contrib.auth``
I'd say it's pretty important and should be considered part of the
todo list for newforms-admin. However, since MI doesn't work in the
old admin, either, there's no reason that it particularly has to be
done before or after landing NFA on trunk.
Jacob
Probably because we haven't really needed the feature until now :)
I'll make some milestones; we can add tickets to them as we go.
Jacob
On Jun 11, 2008, at 10:03 PM, Jacob Kaplan-Moss wrote:
> 8. Many-to-many intermediates (#6905).
>
Shouldn't that be #6095? http://code.djangoproject.com/ticket/6095
George
A better list is at
http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&keywords=%7Eqsrf-cleanup&order=priority.
This falls under "fix outstanding bugs"; if at all possible we should
ship 1.0 with zarro known boogs.
Jacob
Yup; thanks.
Jacob
I've just updated the ticket to reflect this.
Russ %-)
To be perfectly fair, it's not really "prevented". Django supports the
use of database backends not defined in Django itself, so third-party
development of backends is unimpaired. And for the one most people
mention wanting -- MS SQL -- I think that's a good idea; that backend
has a history of people stepping up, putting in a burst of work and
then fading away, leaving the code dead and the Django dev team
responsible for maintaining it as long as it's in Django's codebase.
What really needs to happen there is much the same as what happened
with Oracle: some people who are really clamoring for it need to
organize and start pooling their efforts to develop something that can
comfortably become a part of Django (and now that external backends
are supported and qs-rf made the underlying mechanics of custom Query
classes much simpler, anyone wanting to do a new backend probably
faces a much easier time of it than the Oracle folks did).
Post-1.0, any externally-maintained backend that has a good track
record of support and a commitment from a developer to maintain it
into the future can easily be considered for integration, but until
then such projects should stay external.
> I would even consider dropping all but security patches to 0.96. That
> is practically the limit of support anyway it seems, and is not likely
> to cause much work. Those of us on 0.96 don't expect you to support
> our private branches anyway, and maintaining that mess ourselves is a
> huge incentive to bite the bullet and upgrade. You also might
> consider letting whoever can spare the time apply patches to 0.96 and
> do point releases for those people who will stay there forever (and
> I'm sure there will be plenty). You lose nothing as long as there are
> volunteers willing to do that work.
Personally, so long as folks are OK with the fact that it'll only ever
get security fixes I'd be happy with setting a time-based official
support window for 0.96, after which a community effort can pick it up
if desired. At that point I'd imagine it wouldn't be too hard to set
up one or two folks with commit access to the 0.96-bugfixes branch for
that purpose (and we've had good experience with clients who are on
legacy 0.91 Django installs and quite happily just run off a
0.91-bugfixes checkout, which makes pushing security updates to them
insanely easy).
hi,
it always seems quite ugly, that you can create a model with invalid data,
and save it. so when you want to validate it's content, you have to hack around
and create a form for it, etc...
as far as i understand, this change is a backwards-incompatible change,
and also touches quite the basic parts of the whole
models/forms/validation system,
and i thought it's in the plan to have this in 1.0.....
so i wonder, that if the WSGI-conformance ticket is a must-have, then
why this isn't too...
perhaps the WSGI-change is smaller...
anyway, would be great to have the how-can-we-help data
(liutenant/committer/etc)
published as soon as possible...
gabor
On Thu, Jun 12, 2008 at 5:03 AM, Jacob Kaplan-Moss
<jacob.ka...@gmail.com> wrote:
> 7. Land GeoDjango as ``django.contrib.gis``.
Not that I have any right to say anything ... but should this really
be a django contrib ? Isn't it more of an external application ?
Regards
Rajeev J Sebastian
Ouch... To paraphrase Joel Spolsky "If you have a hand-wavy feature
called "1.0 release" and you schedule 3 months for it, you are doomed".
Jacob, honestly, where this date has come from? It can as easily be
August or October. You've outlined a good feature list and seem resolute
to stick to it. But unless all those lieutenants would plan their
features *in work hours*, you just can't know the date.
I was refraining from saying this because it's not that important after
all. However since Simon had (and others will) announce this date all
over the internet, we as a community will feel obliged to meet it
somehow, e.g. by throwing out really important things that we don't want
to. So may be it's not too late to state clearly that we have a plan but
it's not a schedule.
> So we'd like to deal with that situation a bit specially. I've
> unfortunately not
> had a chance to ask Thejaswi (the student working on comments) or
> Jannis (his
> mentor) about this, so obviously they'll need to be OK with the idea.
I can only answer this preliminarily at the moment due to Thejaswi's
absence this week. But I'm confident of his progress and personally
think we can meet the schedule.
> We encourage people to push newforms-comments pretty hard,
> especially during sprints.
Good idea.
Cheers,
Jannis
Then you'll be glad to know that it's #3 the list of "Must-have
features" in Jacob's email, just a bit below the portion you quoted.
-Gul
> 11. Better support for controlling middleware ordering (#3591).
First, I think you meant #730
Second, I think this needs to be a must have, or at least the current
behaviour must be *documented*. See discussion on #749
Thanks,
Luke
--
"Don't mention it. Oh, you didn't." (Marvin the paranoid android)
Luke Plant || http://lukeplant.me.uk/
If this is vital (for which I'm not a great judge) then it can only
happen by actually calculating the date, not just by choosing something
"motivating". And calculating means that every feature should be divided
into pieces that are fully designed and scheduled. It's very hard and,
you know, *boring* and it's why I think nobody will do this (I wouldn't
:-) ). So what's the point of hoping for September if it's not real?
It's not so much about "preventing" work -- nobody here works *for*
me, and I can't really tell anybody what to do. It's more about
focusing priorities. So the idea is that if someone comes along
wanting to help, we can show them a todo list of features that'll
actually help us hit 1.0 on schedule.
If people are excited about other database backends they of *course*
can work on them, but we'll simply defer discussion of including the
backend in Django until after 1.0 ships. I'm OK doing this since
database backends can be external (i.e.
http://code.google.com/p/django-mssql/).
> The schedule looks good. I think you should be hardlined about the
> dates and not as hardlined on what makes it in.
That's the plan. Only the "blocker" features actually can delay the
release, and I expect them to be done (sans bug fixes) by that alpha
date.
> I would even consider dropping all but security patches to 0.96. That
> is practically the limit of support anyway it seems, and is not likely
> to cause much work.
Good thoughts, but let's table this discussion until we actually get
around to appointing version managers; if we try to tackle too much
process now my head asplode.
Jacob
Remember back in math class where you'd get marked down despite the
correct answer because you didn't "show your work"? I always hated
that. Still do, apparently, because although I just threw those dates
out there, I really did work very hard on them, and I do think they're
feasible.
First, it's not "a had-wavy feature": only the blocker items *must* be
done for 1.0. So if we'll all extremely lazy, we've got one
big-but-mostly-done feature (nfa), one medium-but-easy-and-also-almost
done feature (newforms in generic views), and one
trivial-and-done-but-not-merged feature (#285). I think it's perfectly
reasonable to expect to get those done in three months, don't you?
I didn't, though, just plunk a date three months out; the idea is to
take about a month to get to the alpha -- that is, one month to finish
the blocker features (but not necessarily make them bug-free), then
two weeks to the first beta, then a week each between each snapshot
until 1.0.
Further, I actually *can* predict at least one person's time in "work
hours": mine. Thanks to my kick-ass job, I get to spend most of my
work hours on Django. On top of that, I have firm commitments to
attend the sprints from a number of talented developers; I know from
experience that sprints are incredibly productive. We'll have *six* of
them between now and September.
Now, of course only time will tell whether I'm nuts or not, but I'm
pretty confidant that we can hit these dates. More important, though,
is that having firm dates will force the people working on "maybe"
features to put up or shut up, and it'll make our jobs as integrators
much easier -- only having a handful of things to merge will make that
process *much* less fraught.
> So may be it's not too late to state clearly that we have a plan but
> it's not a schedule.
Well, I tried to do that with the disclaimer about this being a draft
at the top. But, yeah, of course this is just a draft. That said, I
don't hear alternate timeline proposals -- do you have one? If you do,
you might want to learn from my mistake and "show your work" :)
Jacob
Yup, I meant #730, and I think you're right that we should figure out
something to do on #749 as well. Added to the todo list.
Jacob
It is, assuming it gets done. Last I check Honza was working on it,
and if he's still interested I expect he'd be able to wrap it up.
However, while it would suck to ship 1.0 without it, there's nothing
about the API that has to be backwards-incompatible, and it's a
potentially "dangerous" feature in that it could spawn a lot of work.
So, if we can get there, great; if not, well, you've got a reason to
look forward to 1.1 :)
> so i wonder, that if the WSGI-conformance ticket is a must-have, then
> why this isn't too...
>
> perhaps the WSGI-change is smaller...
Exactly -- the WSGI change is very small, and actually done (see the
latest patch on #295). It basically just needs to be applied.
> anyway, would be great to have the how-can-we-help data
> (liutenant/committer/etc)
> published as soon as possible...
Yup, that's the next step!
Jacob
I'm not sure... I think probably beta 1 should be the API freeze, but
it's possible that with all the new features due at that point we
might need to tweak the APIs to fix bugs afterwards. I'd say that best
plan should be that any backwards-incompatible API changes after beta
1 need a quick discussion here; sound good?
> Also I it may be interesting to show some love to the sprintideas page
> (http://code.djangoproject.com/wiki/SprintIdeas). And get a wiki page
> up for the Europython sprint (I couldn't find it). If you want me to
> take care of this stuff, let me know.
That would be awesome -- thanks!
Jacob