Django Diaries / 1st Jul 2014

The End of an Era

It's been a long while since I posted news of the Django migrations work; my apologies for that, and I'll write about what's been going on there (and the upcoming 1.7 release) soon.

For now, though, I want to focus on the past, rather than the future. Today I've released what is probably the last version of South, version 1.0.

South has had very few changes for a couple of years now, and the only reason it's getting a release at all is one new feature to aid in the upgrade to Django 1.7.

Easier Upgrades

This feature is that South will now look first for a south_migrations directory, before falling back to migrations. This one small change means that third-party libraries and apps can support both South and the new-style 1.7 migrations, by moving their legacy South migrations into the south_migrations directory, and having the Django migrations in the migrations directory.

This is the end result of the attempt to try and introduce a forwards-compatible "South 2" that would read the new migration format but run under Django 1.4 to 1.6 (the version South 1 supports). The differences between the versions ended up being too great for this to be possible; in particular, swappable models and the changes to app loading made any automated porting attempt almost impossible and to do it manually would mean even more work than was expended on Django 1.7.

My apologies to those who were hoping for new-style migrations on older Django versions, but this way is much better for maintenance and means far fewer weird porting bugs taking up my (and your) time.

Version 1.0 at last

This does, however, mean that this release is likely the last hurrah for South. It's had an incredible eight-year history, including an initial release that somehow ended up with me at the inagural DjangoCon in Mountain View and which has gone so far that I cannot comprehend how many people actually use it.

Fortunately, it's not goodbye to the concept, just to the name. Django migrations are South 2 in all but name; they're my original interaction design refined over eight years and with sigificant improvements to functionality, stability and expandability. Things like detecting renames, dealing with swappable models and working out dependencies are all just there now, rather than seeming like an incredibly optimistic goal.

That said, I'll take any opportunity to write a slightly emotional blog entry, and this is definitely one. Even though nothing has really changed, South has been going for almost a third of my life, and a good portion of my programming career, so end-of-lifing it is symbolic for me.

I'll keep South updated with security updates, which I honestly never expect to issue any of (as a local tool run only by developers, it's not very exploitable), and I'll be around the mailing list for some years to come, too, I suspect.

I couldn't have picked a nicer community to accidentally fall into in my earlier days of programming; the Django community has always been open, helpful, sensible and politely critical at all the right times, and I've met many wonderful people along the way (and been to far too many DjangoCons too).

I'd like to thank all the South users, and especially all the South contributors, for their help along the way, and for making my battles with database schemas that little bit easier, and I'm excited for what the new Django migrations will bring to the fold (and with some other radical new ideas I'm brewing up for Django in my now-more-free time).

As I think South might say: so long, and thanks for all the tables.