A WIP has just been released with our first round of plug-in compatibility loading.
NOTE
This feature is limited to plug-ins built on top of the RhinoCommon SDK (including compiled scripts). Rhino does not have the capability to do what I am describing with C++ plug-ins (sorry).
The Goal
Allow plug-ins to load and run in Rhino even though they were compiled against an older (or future) version of Rhino.
What is compatibility loading?
Traditionally, Rhino uses a versioning system to figure out which .NET based plug-ins could load into a given version of Rhino. This was done by looking at the version of RhinoCommon a plug-in was compiled against and seeing if the currently executing version of RhinoCommon is compatible based on version comparisons. For example, a plug-in compiled against the RhinoCommon in V5 SR7 (version 5.1.30000.11) will run in SR7 and above, but not in SR6. The major version number also defined the major version of the product which meant that this plug-in would not load in V6.
This traditional version number checking still exists in the current WIP, but if the version checking says that the plug-in should not load we perform a compatibility test on the plug-in. @will helped us develop the compat executable which looks at a RhinoCommon based plug-in and figures out which functions in RhinoCommon are called by the plug-in and if these functions exist in the executing version of RhinoCommon then the plug-in is considered “compatible” and will load. My internal geek thinks this is really cool.
What does this mean?
Many RhinoCommon based plug-ins that were written for V5 and most compiled scripts will load into the V6 WIP.
How you can help
This is definitely an early work-in-progress feature that I expect will need fine tuning over time.
- Try loading a V5 RhinoCommon based plug-in (or compiled script) into V6. If things aren’t working as you would expect, please let us know. There may be plug-ins that don’t load that should be loading.
- If you have any questions about this feature, please post a comment here so we can figure out how to clarify this feature.
Thanks!