Malleable systems can be made out of rigid building blocks.
If you have the agency to mix and match rigid building blocks, then you can assemble a malleable combination.
This is true even if you don't have agency over the individual pixel-perfect / rigid building blocks.
In a given system, when you cannot compose the building blocks, your agency is reduced.
A key dimension: how big are the building blocks relative to the overall assemblage?
The larger the building blocks on a relative basis, the less agency you have as a user.
Apps are like big duplo blocks; hard to combine in any but the most rudimentary of ways.
Malleable software will have components that feel like sand: rigid building blocks, but so small that the overall thing flows like a fluid.