At yesterday’s dev meeting, we had a discussion about the philosophy of making changes to SuperCollider.
We asked ourselves what kind of ‘guarantees’ we should keep in mind when introducing new versions of SuperCollider, so that those changes doesn’t negatively impact the work of people using SuperCollider.
Please note that due to the collaborative nature of the project, we’re not talking about strict guarantees a legal contract might offer.
We discussed three specific examples.
Non-breaking changes : how do we handle deprecation ?
Sometimes, developers introduce a better way to implement a functionality. For example, the Pstutter class has been replaced by Pdup, encouraging the use of the new class.
The Pstutter class is still documented, for backwards compatibility reasons (and historical purposes).
Those kind of changes accumulates artifacts inside the base code, which can make the base code difficult to apprehend, and might also confuse people who don’t know which functionality is deprecated or not when this hasn’t been documented yet. But keeping those deprecations in the base code allows backward compatibility.
For now, it seems that the implicit rule is to keep deprecated functionalities to favor backward compatibility.
Breaking changes : technical difficulties.
The example we discussed here concerns the implementation of QT 6. This would allow SuperCollider to keep evolving, and most notably to implement some new functionalities to the IDE.
But implementing QT 6 over QT 5 requires using a new version of C++, which isn’t supported on ‘old systems’. If I’m not mistaken, this would cause new SuperCollider versions to be unsupported around MacOs X, which currently supports SuperCollider.
In practical term, this means that if you need to present a piece you wrote 20 years ago, new SuperCollider versions might not be able to run your piece anymore (for hardware or OS compatibility reasons, code changes, etc).
Old SuperCollider versions are referenced and available to download, but that might not be sufficient for you to easily get you piece working.
Breaking changes : impact on artistic decisions
At some point, we might have to rewrite UGens, either to fix them, adapt them to a new functionality, etc. This is a complex subject, because rewriting an UGen will certainly have an impact on the sound of your piece if you use it, thus interfering with the artistic decisions you made when you wrote the piece.
Your whole piece might even be based on the ‘bad’ functionality we’re trying to fix.
As much as we’d like to separate artistic context from technical issues, they remain dependant on each other. How do we deal with this?
Getting users feedback on this topic would help us anticipating those problems as we keep SuperCollider evolving. Feel free to comment, especially if you can think of other related issues those examples do not cover, if you ever had a problem related to an SC update, or if you have a magic trick that can solve all these problems at once while turning lead into gold.
Regards,
Simon