I've reverse-engineered a couple of programs before in order to get them to do what I want. Things like setting default options in a program that doesn't let you change the defaults, or getting older Windows programs to function correctly.
I've also patched open-source programs locally in order to get them to do what I want but wouldn't be suitable for upstreaming. For example, I've reverted the order of buttons in a "do you want to save?" close dialog when they changed in an update.
Minor stuff, but just being able to do this is amazing. The trouble is, developers - at least those of closed-source programs - don't want you to be able to do that, partially due to a lot of them relying on security by obscurity in order to earn money.
As such, it feels like the only way you're going to get developers to be on board with something like this is to be able to have them specify what people can change and what people can't change - and that's something that developers already do (whether they realise it or not) with things like INI files and the Registry.
This is why people using UNIX-based systems campaign for small programs that do one thing and do it well. Being able to combine these small programs into a pipeline that does exactly what you want? Now that's amazing.
I have also patched open-source programs locally in order to get them to do what I want, although sometimes the program is very large and takes a long time to compile, while other times the program is much smaller and can compile more quickly. I had also sometimes modified binaries, or had entirely rewritten a program to get it to do what I wanted. Sometimes, I was able to do it by editing configuration files manually rather than using the UI, or by changing the permissions of files.
Do you think it's possible to make GUI software with a Unix philosophy? Specifically piping together small programs seems natural in a shell but I've struggled to figure out how it could work for GUI apps.