Versioning workflows compared to BPMN engines

I have worked a lot with BPMN engine, and I think the possibility to bind processes to subprocesses with different invocation semantic (i.e. same deployment, latest available, fixed version) is extremely powerful.

I also find powerful being able to query running processes and see how many are running for each version of the process. Maybe there will be some of them which I want to migrate to a new version, while other will still need to run in the old version

Does Temporal provides this sort of support, and if it does not, why not?

Temporal supports the semantics you described, but we don’t recommend it. The main problem with versioning a whole workflow is that it is not possible to fix bugs in workflows that have already started. So if a workflow runs for 3 months and there is a bug at its end then any workflow that was started before the new version with the fix was released is going to experience the bug.

The recommended way is to version each part of the workflow code independently as described in the documentation. This way you can have just one version of the worker code that works with already started workflows as well as the new ones. This also supports fixing bugs for already started workflows.