Montage Package Mechanics, Economic Integration, and Opinions
The previous section described the importance economic integration, and the necessity of removing transaction costs between different economic actors to accomplish this.
Both Virtuoso and Montage are so-called "opinionated infrastructure", and this is a good thing. The layering of Virtuoso infrastructure on top of Montage infrastructure is itself telling of the opinionated design. And whether you agree with the opinons or not, it is very helpful to clearly understand these opinions.
Montage orchestration is organized around several different concepts:
Montage Activity: A Montage "Activity" is a fully orchestrated design project or activity that a user wishes to work on, on their computer (on-premises), or elsewhere. The Activity represents the project or projects being worked on, as well as all software, SDKs, drivers, and everything else needed to build and run the project. For clarification regarding the difference between Montage Activities and build system generators, see here. Montage Activities represent the entire dependency graph of packages necessary to guarantee that once the packages are unified and installed, the activitiy will build and run.
Packages: Packages are the modular blocks that are orchestrated by Montage Activity dependency graphs. Packages can be Montage packages or native packages used in specific ecosystems. Montage infrastructure is designed to flexibly adapt to existing package management systems to unify the orchestration of packages across traditional ecosystem barriers. Both Montage Activities and Packages are purely abstract concepts. What they actually represent gets solidified when Montage is adopted to specific ecosystems.
Installation Targets: Montage orchestration involves, among other things, logically "installing" packages into 'things" that packages can be installed into, which we generically call "installation targets". A C# project will typically have Nuget packages installed into it. In that case the Nuget package corresponds naturally to the Montage generic notion of a "package", and the C# project itself is the installation target that the packages are installed into.
Dependency Graph Unification: Packages commonly have dependencies, and before a package can be installed into its installation target, all package versions must be "unified" to ensure that all dependency requirements are satisfied. If a dependency can't be satisfied because it conflicts with another dependency, then the package can't be installed.
Unification Domain: Montage Activities represent packages that need to be installed into installation targets. The set of all installation targets that the Montage Launcher must orchestrate is called the "Unification Domain". Unification domains are currently limited to a specific PC, but the scope of unification domains and Montage's orchestration will grow.
Target Packages: During your use of Virtuoso and the Montage Launcher, you will see references to "Target Packages". A "Target Package" refers to a particular package being installed into a particular installation target. There may be five different C# projects on my PC. The single package "Virtuoso.StandardLibrary" may or may not be installed to each installation target. The Virtuoso.StandardLibrary package could unify to version 1.0.0 in installation target "A", but unify to version 2.0.0 in installation target "B". Because the same package is installed into different installation target, they unify independently, and the combined package and installation target scope is called a "Target Package".
Heterogeneous Unification: Traditionally, package management systems support specific packages for specific native projects, like C# (Nuget) or Python (PIP). These "homogeneous" package management systems support orchestration of packages within a single installation target, all of the same type. Montage supports orchestration of packages with dependencies that can cross boundaries between installation targets and package types. This is where substantial power is created.
Governance: Package management systems also typically do not provide extensive governance in the form of policy or licensing enforcement. Montage provides this as a core part of its orchestration service.
The full picture of Montage's power and flexibility involves Golden Path infrastructure that supports the content consumer side and the content producer side of a two-sided platform. The Golden Path for consumers involves effortless ease of use of content, whereas the Golden Path for consumers includes all infrastructure related to managing and even monetizing content. With these basic concepts in place, we can walk through a step-by-step example.