
(click to enlarge)
And here is what I propose:

This should outline a basic C++ Interface, highly generic, and easy to create bindings for. The matter of creating a C API is purely negotiating the communication between CAIObject instances across the library boundary. This can be done by changing the IAIObject class that the AIs inherit from into a basic wrapper class around which a C API can be built.
For backwards compatibility, the existing interface can be hoisted up as a wrapper using the old code to implement its functionality. As the new interface is built we can change the implementation of the compatibility layer and eventually remove the old interface completely. This way the process can be done gradually over a long period of time should there be periods where no developers are able to contribute to the effort.
While Ive started this thread I must stress that I do not have the time or means to do this single handedly, nor do I have the resources to spearhead as a leader by example. I will help out but I cant push this forward implementation-wise as I have my lobby project and other projects to think about.
Having said that, I've kept in mind that what I've proposed could be done piece by piece slowly over a very long period, possibly multiple spring releases. The advantages are that we could use a lot of new languages that compile into native code, and adding new language bindings would be far easier, and we could use any compiler we wanted, and there would only be one interface in the end to maintain and a set standard method of updating and adding to it.