On Sun, 9 Apr 2017 22:04:13 -0400 "William L. Thomson Jr." <wlt...@o-sinc.com> wrote:
> This has never been the case with Java. Its not a problem with C binaries either, because you have a discrete compile time, and language level interop between compiled binary forms. Meanwhile, you cannot build two parts of a given python dependency chain with different pythons, nor different perls. > If package A requires version X, but B Y, then B builds with Y as its > pulled in as a dep. while A proceeds to build with X. > > Where this is different for Python, Ruby, and also Perl. They all > install files into a directory based on version. You may have multiple > copies in each, vs one. Perl does not have targets, nor does Java. Right, but this is impossible with Ruby, Python, and Perl. Perl *could* have targets, and some people think could do with it, but it and java are very much in different boats. Perl is in the same boat as Python and Ruby where in "new version of thing" means "everything must be compiled with the new target" Perl simply has a *moving* target instead of multiple concurrent targets. Essentially, with Perl we've done the effect of "Add X, Remove Y" for all things. We additionally have a much better precedent than python at syntax-interop between versions, so its more justifiable to only have the single target ( because you practically never need an older perl "just for compat reasons", though at the rate this garbage[1] is going, that could change one day ) If anything, Perl is only avoiding the Python problem you hate with significant amounts of heroism, and its only a matter of time before upstream force our hands in ways that make that heroism non-viable, and we have to dig deep and work out how the hell to maintain concurrent targets. > The present system is a PITA for users. Fiddling with adding/removing > targets for Python/Ruby. In addition to selecting which for the system. > All these same problems exist for Java, with the exception of > installation locations as mentioned. I honestly think you're looking at the wrong problem domain to fix this problem, in ways that will introduce yet more regressions and broken trees. We should have what I've been saying we should have for a while now: * Soft Options. We only have 2 types of option at present from the users perspective, "on" options, and "off" options. Portage doesn't even distinguish between who is setting them, user profile and the gentoo profiles simply flatten into a single logical profile, and then portage then demands that changes be made to this set, failing to discriminate at all between "ok, this was the profile specified default and it needs to be non-default for this problem" and "user doesn't actually want this, how can we avoid that" And portage then compounds this by dictating that any option changes that ebuilds need must be enshrined by the user as things the /user/ wants, when in truth, they're not things the user wants, they're things the ebuilds want, and the user begrudingly accepts. Hence why an option of "on, but only if portage really needs it" is missing, but needed. I would gladly set soft-targets of every python version under the sun, and then allow portage to turn them on *as necessary*, and this would be much preferable to having to either a) turn them on globally and pull in stuff and waste time compiling stuff that's not even getting used. b) Maintain a painful and carefully catered list of things to prevent aforementioned problems. In short, users need a way to discriminate "things I care about" from "things I don't care about" Currently, its just a big cluster of those things in one place, and the complexity is inescapably thrust into the users hands on a daily basis. 1: https://bugs.gentoo.org/showdependencytree.cgi?id=613764&hide_resolved=0
pgpF4zTjVMYjD.pgp
Description: OpenPGP digital signature