+1 for starting now.  Better to start early so we and plugin devs can start moving over, esp regarding the multi threading API, then leave it till the end.<div><br></div><div>I think we could also generate some kind of report with API changes, see <a href="http://stackoverflow.com/questions/6596364/tracking-c-lib-public-api-changes">http://stackoverflow.com/questions/6596364/tracking-c-lib-public-api-changes</a></div>

<div><br></div><div>- Nathan</div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div><br><div class="gmail_quote">On Wed, Aug 10, 2011 at 8:32 PM, Tim Sutton <span dir="ltr">&lt;<a href="mailto:lists@linfiniti.com">lists@linfiniti.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi<br>
<div><div></div><div class="h5"><br>
On Wed, Aug 10, 2011 at 11:58 AM, Martin Dobias &lt;<a href="mailto:wonder.sk@gmail.com">wonder.sk@gmail.com</a>&gt; wrote:<br>
&gt; Hi there<br>
&gt;<br>
&gt; watching the recent developments in the master branch I see various<br>
&gt; nice improvements. And they have something in common: they do _not_<br>
&gt; break API compatibility :-)<br>
&gt;<br>
&gt; I would like to bring up this topic, because we should purge a lot of<br>
&gt; cruft and deprecated APIs on the road to 2.0. The reason why I start<br>
&gt; this is that I have been closely looking at the merge of threading<br>
&gt; branch to master. The changes in that branch are essentially of three<br>
&gt; types:<br>
&gt; 1. asynchronous map rendering (i.e. ability to browse the map while it<br>
&gt; is still being rendered)<br>
&gt; 2. thread-safe API for vector access<br>
&gt; 3. various speed optimizations<br>
&gt;<br>
&gt; Asynchronous map rendering is relatively simple to merge and requires<br>
&gt; only few API changes. But without new API for access to layers it is<br>
&gt; possible to produce crashes (e.g. map is still being rendered when you<br>
&gt; decide to start editing or do some analysis). The new API for vector<br>
&gt; access (using iterators) will require removal of the old API<br>
&gt; (select(), nextFeature()) in order to work well. And that means that<br>
&gt; virtually any functionality that uses layers&#39; data has to be updated<br>
&gt; to new API. We need to break things in order to make threaded<br>
&gt; rendering work.<br>
&gt;<br>
&gt; The question is how to proceed and how to communicate that to users.<br>
&gt; The procedure could look like this:<br>
&gt; - set a date when we will start breaking API compatibility<br>
&gt; - create a tag in git that would be the last revision of master branch<br>
&gt; compatible with 1.x API<br>
&gt; - change plugin manager so that it allows only plugins that say qgis<br>
&gt; 2.0 is the minimal version for them to run<br>
&gt; - change plugin installer so that it works only with new plugin<br>
&gt; repository and shows plugins for qgis 2.0<br>
&gt;<br>
&gt; Is there anything else we should consider? The point is to make the<br>
&gt; transition as smooth as possible for those using qgis-master.<br>
&gt;<br>
&gt; And what are your opinions when should we start with the breakage...<br>
&gt; in a month? in a week? tomorrow? now? :-)<br>
&gt;<br>
<br>
</div></div>I think the fact that we are going to break API in 2.0 is well known<br>
and discussed often in releases, blogs, qgis hackfests etc. and is a<br>
general expectation when performing a major version numbering change.<br>
I think your approach is good (tag last api compatibility etc). As far<br>
as I am concerned we can go ahead with API breakage today. There are a<br>
number of other gut wrenching changes I would like to make for 2.0:<br>
<br>
- change theme to &#39;gis&#39; theme by default<br>
- get rid of kids theme<br>
- rename default theme to &#39;legacy&#39;<br>
- remove all deprecated api calls<br>
<br>
Many parts of our api have developed inconsistencies and I would like<br>
to spend some time putting my &#39;rpl&#39; binary to good use trying to clean<br>
these up before we release. I think we should continue the practice of<br>
marking new api additions / changes with a @note added in 2.0  or<br>
@note replaces getLayerId in 2.0 etc. as far as possible so that<br>
people can adapt to our changes easily.<br>
<br>
Anyway +1 for API breakage from me - we will continue maintaining<br>
1.7.x for now anyway for those looking for stability. The number of<br>
things we can reasonable backport will shrink as we mess with the API<br>
but I don&#39;t see the impact to be too big.<br>
<br>
Regards<br>
<br>
Tim<br>
<div class="im"><br>
<br>
&gt; Martin<br>
&gt; _______________________________________________<br>
&gt; Qgis-developer mailing list<br>
&gt; <a href="mailto:Qgis-developer@lists.osgeo.org">Qgis-developer@lists.osgeo.org</a><br>
&gt; <a href="http://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
&gt;<br>
<br>
<br>
<br>
</div>--<br>
Tim Sutton - QGIS Project Steering Committee Member (Release  Manager)<br>
==============================================<br>
Please do not email me off-list with technical<br>
support questions. Using the lists will gain<br>
more exposure for your issues and the knowledge<br>
surrounding your issue will be shared with all.<br>
<br>
Visit <a href="http://linfiniti.com" target="_blank">http://linfiniti.com</a> to find out about:<br>
 * QGIS programming and support services<br>
 * Mapserver and PostGIS based hosting plans<br>
 * FOSS Consulting Services<br>
Skype: timlinux<br>
Irc: timlinux on #qgis at <a href="http://freenode.net" target="_blank">freenode.net</a><br>
==============================================<br>
<div><div></div><div class="h5">_______________________________________________<br>
Qgis-developer mailing list<br>
<a href="mailto:Qgis-developer@lists.osgeo.org">Qgis-developer@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
</div></div></blockquote></div><br></div>