Should we continue to allow changing the port version based on OS version? Currently we do this in several ports e.g. to offer the last compatible version to old OS versions. Josh brought up in a ticket that we should consider not doing that, and instead create separate versioned ports. I thought we should discuss because there are pros and cons to each approach and currently we have a mix of strategies.
For example a user who wants cliclick just installs the port. It picks the right version for the OS version. This is simple for the user. The alternative is that a user of an old OS would have to know to install a hypothetical cliclick4 instead. And the situation becomes complicated if the criteria change. For example, if I later figure out a way to offer version 5 to some older OS versions, how does the user who installed cliclick4 learn of that? But such ports that mutate to fit the environment are more complex to write and maintain. And we have to remember that we can only change the version (and any other property that goes into the portindex) based on the segmentation of our server-side portindexes. We maintain separate indexes for each OS version/arch combination so we can change a port version based on OS version or arch but not based on other criteria like Xcode version. Sometimes the single mutating port strategy doesn't work so well. The go port is an example. Many go modules fail to build on older systems because they require a newer go than the latest one that works on the older system. But this wouldn't be solved by switching to multiple versioned go ports. Each go module port would still need to know its minimum go version which it currently doesn't. Or, depending on how common it is for modules to require newer go versions, we could dispense with the idea of go supporting old systems entirely. The separate versioned ports strategy also doesn't always work well because it takes continual effort to keep them in sync. The postgresql ports for example are all a little different from one another because at various times a fix or a reformat only got applied to one of them but not the others.
