Major versions (the first number in the version) are allowed to change the API from previous major versions. Minor versions are only allowed to make minor changes to the API that should be relatively easy for plugin developers to update their plugins for.
Unfortunately I don't know the SDK that well. One suggestion I have is making the first call to a plugin a request for the SDK version number that was used to program the plugin. Like was the case with the update from Firefox 1.0 to 1.5, plugin developers will have to update what this function returns from release to release, but that is not hard. Most Firefox 1.0 plugins worked in 1.5 by exactly this type of change. Minor versions are also allowed to add new features to the SDK that do not interfere with the already existing SDK. Not interfering is the key to the idea that plugins will probably work after a minor version update, with little to no changes before the code works.
There was the suggestion to move to an entirely new concept for events and event bindings for 2.0. That alone would require all plugins be updated for 2.0. The fulll major version release cycle (dev, beta, RC, final) is designed to work around such requirements and give plenty of time to allow updating to use the new SDK changes.
All that said, the only changes you need to make before RC3 are:
* if you plan to release a minor version between 1.0 and 2.0 (such as 1.1 or 1.5) you will need to make changes now with the understanding that only very small SDK changes (excluding additions) are allowed between minor versions.
* you need a way to verify the SDK version that a plugin is designed to work with so you don't have C::B 2.0 trying to load a 1.0 plugin that clearly won't work. You can implement this with either:
- a function that returns single number (string) of the form "1.0" or "major.minor" that a plugin is designed to work with.
- a function that returns a range of the form "1.0-1.5" that a plugin is designed to work with.
- two functions, one that returns the minimum and one that returns the maximum.
Keep in mind that these functions should never change. A call by any future C::B version to this function will quickly let C::B know whether or not it should try to load the plugin.
There is no obligation to make changes to the SDK that you know will not appear until the 2.0 development cycle. Since we technically are already in RC stage, I suggest holding off on making any such changes now that are not trivial.
If we come out of 1.0 ready to add/change a bunch of things, there is nothing stopping us from starting development on 2.0 immediately, so we won't be hindered by obligations to not change the SDK. Make 2.0 development a branch in the repository so 1.x development can continue with bug fix patches in the trunk, and merge the branch with the trunk when we are ready for 2.0 Beta 1. Before that merge, branch the final trunk version of the 1.x code so any future major bugfixes that it needs can still be made, but for the most part we'll be able to "abandon" it at that point.