• Re: [gentoo-dev] [RFC] Splitting dev-lang/python into per-slot packages

    From =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?=@21:1/5 to Eray Aslan on Sat Oct 12 12:00:01 2024
    On Sat, 2024-10-12 at 11:49 +0200, Eray Aslan wrote:
    On Sat, Oct 12, 2024 at 10:12:56AM +0200, Michał Górny wrote:

    As a side notice, the existing versions would probably remain as-is
    until removal, since there's really no gain in splitting them, given
    we'd have to retain compatibility with existing depstrings.

    so no dev-lang/python3_13t? nothing crucial but would have been nice

    Actually, I've put the whole freethreading work on hold to determine if
    we want to go for dev-lang/python3_13t. What I've meant, regular 3.13
    and older will remain as dev-lang/python:3.N.

    --
    Best regards,
    Michał Górny


    -----BEGIN PGP SIGNATURE-----

    iQFGBAABCgAwFiEEx2qEUJQJjSjMiybFY5ra4jKeJA4FAmcKRrISHG1nb3JueUBn ZW50b28ub3JnAAoJEGOa2uIyniQO3IoH/RTe9ElDU9kcBby1ZQrmku1zr+EYzZOI 7wFIroKZvNNfuVVjtFCTSchNLJ+Eh6HUjsAUuhBW8lQevo8shekRF7eyvWGzKGRd MLBftCggyuKIOj6VzuKjqgGyb4vGpdN46o6q3Xbtff7tebAbElZQp+P6WyzMGd70 YMaKCr70VxBCuydhTqe94iJ56p5oPpH7ZiXHBqKBIUxxTxo/eiSR7nHjhrbY0Zg9 YVDiZ/4QsIkSl86p6WpWqjBbeozt1ukKIkFgXlJifyJLp2erBBZC2zT7Gy3ARikB LUuiMQRxxVfSehl51ZIi43EN1LRZuk010CRg42VaV+x8KU9B0hL/p8k=
    =jYbt
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Eray Aslan@21:1/5 to All on Sat Oct 12 11:50:02 2024
    On Sat, Oct 12, 2024 at 10:12:56AM +0200, Michał Górny wrote:
    Historically, all versions of CPython were slotted in a single package,
    i.e.:

    dev-lang/python:3.N

    This approach has been causing a major annoyance for users -- due to
    Portage "greedy" upgrade behavior, any time a new Python version was keyworded, Portage insisted on installing it, even though user's
    selected targets did not request the specific version. The potentially
    worst consequence of that would be random user scripts stopping to work,
    as they suddenly start using new Python, while all their dependencies
    are still installed per PYTHON_TARGETS.

    Upstream has recently added freethreading support to CPython. Since
    this support is not ABI compatible with the regular build, we need to introduce a separate target for it, and to package it separately.
    In the planned patchset, I've already put it as a separate package (dev- lang/python-freethreading), because otherwise Portage would insist
    on upgrading to it!

    However, I think the cleanest way forward would be to stop slotting
    CPython like this, and instead have a separate package for each version,
    just like the vast majority of distributions do, i.e.:

    dev-lang/python3_N

    FWIW, if I were to start anew, my ideal env would probably be:

    1/ keep N versions of python installed all the time
    2/ give the option to define N with sane defaults and limits
    3/ upgrade greedily
    4/ give the option to define upgrade behaviour (switch default python interpreter to newest, no change, no change unless no longer in the tree
    etc)
    5/ do not change from free-threaded to regular GIL versions or vice
    versa automatically. keep to one lane (this might even apply to jits so
    perhaps make it easy to define lanes)
    6/ make it easy to create virtualenvs with any python interpreter
    7/ make it easy to change between any python interpreter and set a
    default

    Your proposal is close. It would require some (minimal) manual work but
    that is reasonable afaic

    This naturally means that only the specific version requested (e.g. via targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose
    first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t

    (Alternatives: python-3_14, python-freethreading-3_14? Though I think following PYTHON_TARGETS is cleaner here.)

    dev-lang/python3_14t is a better looking option imho

    As a side notice, the existing versions would probably remain as-is
    until removal, since there's really no gain in splitting them, given
    we'd have to retain compatibility with existing depstrings.

    so no dev-lang/python3_13t? nothing crucial but would have been nice

    Comments?

    Thanks for doing this

    --
    Eray

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ulrich Mueller@21:1/5 to All on Sat Oct 12 12:10:01 2024
    On Sat, 12 Oct 2024, Ulrich Mueller wrote:

    IMHO this would abuse the package name for information that absolutely doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    How about introducing something like PROPERTIES="separate-slot" instead,
    which would instruct the PM to treat the slot like a separate package?

    Ulrich

    -----BEGIN PGP SIGNATURE-----

    iQFDBAEBCAAtFiEEtDnZ1O9xIP68rzDbUYgzUIhBXi4FAmcKSX0PHHVsbUBnZW50 b28ub3JnAAoJEFGIM1CIQV4uInsH/RBeOTOecUDPoGvisozCD9W4FOtwXE4BMRRy IE20ofiuH/uuKGv+kWxKMTF4UHg6dD9mFUS9/Gn0dZkhDa5uQH6mscwpPbY2UbBC hABE1LAK0ZBPwhckLBfHLhlUNaU1sQW+eJMzIG8PYK1q/rO1uCkk/IpXzUzh+vpd 1GDnU5nse1fTxfSxOfqafexj6n6o8sc347dmNdDe4nRVWx62yp7EyKSjraz6zVtL nPcX9NdUb8UOoFLJFeh7r6z+YXNVVeQT6J50MOKzWxmf3Ab33ajWHOFe1+CamQlD jNqXXJ6OFkzxM+eD5MhjB9iQqxyzc6OV5CACo26uivympEEWeI4=
    =gI5V
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?=@21:1/5 to Ulrich Mueller on Sat Oct 12 12:10:01 2024
    On Sat, 2024-10-12 at 12:03 +0200, Ulrich Mueller wrote:
    On Sat, 12 Oct 2024, Ulrich Mueller wrote:

    IMHO this would abuse the package name for information that absolutely doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    How about introducing something like PROPERTIES="separate-slot" instead, which would instruct the PM to treat the slot like a separate package?


    Isn't it ironic that I didn't manage to finish sending my reply about
    slots being abused and things bent so hard to make them fit slots,
    and you've already managed to propose adding more complexity in order to
    bend things even more into the wrong solution?

    --
    Best regards,
    Michał Górny


    -----BEGIN PGP SIGNATURE-----

    iQFGBAABCgAwFiEEx2qEUJQJjSjMiybFY5ra4jKeJA4FAmcKSjsSHG1nb3JueUBn ZW50b28ub3JnAAoJEGOa2uIyniQOJD4IAI9p2aMoiJmlO1utgqTZV8wFlqY99XYx 4Uvxo3OPpYao3oT148OzgJhCS6H9NL+oa5j5ow80VQ+pNUBU/IXh++7OB1T2vZqF NLWvVwuG/osAjTnvT72MeJzyhFOE44DOiHROO+gtbu/Ar0uAptJuEv5So+/dabz6 vVqKDkJyH5+TNJKWIcdW/Ees4qLewI7PDl/ZVacvSZQByfgbMfxhV4mKIWWMpiMD K0VYUEatYohYF8NX2p4rRp+ODmsWv6KiFliaSIshfTg+G6pE5cDj/HPumkL33uXF j4Dv666ru/VljhDG52dnumLus9RMF6RDtgU6Vfe1oOVtrDKs1pAcaNA=
    =y3ST
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?=@21:1/5 to Ulrich Mueller on Sat Oct 12 12:30:01 2024
    On Sat, 2024-10-12 at 12:13 +0200, Ulrich Mueller wrote:
    On Sat, 12 Oct 2024, Michał Górny wrote:

    IMHO this would abuse the package name for information that absolutely doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    In my opinion, it's the other way around. We have slots, that are a fit solution for packages that are roughly compatible between every major release, and we keep abusing them for every single thing we can bend
    enough to make it fit.

    So are you saying that Python versions aren't "roughly compatible"
    between releases? Like, they're a completely different language?

    They're not compatible in the sense "if I install package for
    python3.12, it will work in python3.13", because every version uses
    a separate package tree. Upstream has effectively made every version
    separate. On top of that, the same "minor" version can have a PyPy
    variation and a "freethreading" variation now.

    --
    Best regards,
    Michał Górny


    -----BEGIN PGP SIGNATURE-----

    iQFGBAABCgAwFiEEx2qEUJQJjSjMiybFY5ra4jKeJA4FAmcKTfMSHG1nb3JueUBn ZW50b28ub3JnAAoJEGOa2uIyniQOF0QIAIbY0xbJbU+P4sndUkYiYYajEKeLElkm 5sm7KAQlrzbrhjEuubNlgeMHKEE8qG8FRReSqxnLNbcpTXVZVlCx24MK2wcwbILp YmKhpoG0rYahNsBRRgPL7kpWdlZU1xnPQ6Qp+knIPD1E8DJ/jNVIWOj6f2n6kgn2 4Hd78BYopoUagbFn5eqs88JiDcjBfgVWl8TfRz6/1Xgj46DcVYngf+0z1pDbL50w rX2vb7kV5T1rttuddyJ0kLB1swX13FPIZ898J0NxhhVY0o/6Ww1Jz2MkIAtuE7pW 2aqjZJ5QSCKyhPRZB/fmPTxxvl51QLdq7bHwSIi0CHhDcJc8caeKD7I=
    =zjUl
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ulrich Mueller@21:1/5 to All on Sat Oct 12 12:20:02 2024
    On Sat, 12 Oct 2024, Michał Górny wrote:

    IMHO this would abuse the package name for information that absolutely
    doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade
    behaviour) that should really be solved in the package manager.

    In my opinion, it's the other way around. We have slots, that are a fit solution for packages that are roughly compatible between every major release, and we keep abusing them for every single thing we can bend
    enough to make it fit.

    So are you saying that Python versions aren't "roughly compatible"
    between releases? Like, they're a completely different language?

    Also, we're not talking about major releases here (that would have been
    Python 2 vs 3).

    --=-=-Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQFDBAEBCAAtFiEEtDnZ1O9xIP68rzDbUYgzUIhBXi4FAmcKS94PHHVsbUBnZW50 b28ub3JnAAoJEFGIM1CIQV4uQBEIALzoBhDUx4vvknQWKCp9Hg85RG4SUoXICHw1 b3aFQPCstd5wmRzkrpnaKUCNBxqgjKwhUzoinxtqSM9jTl2HwhMgZ8M+xcV97beD 2WnUaKVqsV8mrhoe36F6JEmnZSsga3d0opXZKeEdwIjMJHeqIZuycT1WuOSitgcn yXRemRpOif04nyuc0JdeL/ZCClBoVlMuIYxk1Y09YE1n04TEshmCKKKQCkGPwBbR rACgdbN1ID23XmkGO/rsTyA+9oBPC/XB84P0ulTlQoO6MQSzyPKX+GICZmvEJDp6 sPY1JWMEVt2M5FBXXc/7zJVN944oDeibM6Rsduyd58VtHo4hXuk=sLwx
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?=@21:1/5 to Mitchell Dorrell on Sat Oct 12 13:50:02 2024
    On Sat, 2024-10-12 at 07:23 -0400, Mitchell Dorrell wrote:
    On Sat, Oct 12, 2024, 06:23 Michał Górny <mgorny@gentoo.org> wrote:

    On Sat, 2024-10-12 at 12:13 +0200, Ulrich Mueller wrote:
    On Sat, 12 Oct 2024, Michał Górny wrote:

    IMHO this would abuse the package name for information that
    absolutely
    doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    In my opinion, it's the other way around. We have slots, that are a
    fit
    solution for packages that are roughly compatible between every major release, and we keep abusing them for every single thing we can bend enough to make it fit.

    So are you saying that Python versions aren't "roughly compatible" between releases? Like, they're a completely different language?

    They're not compatible in the sense "if I install package for
    python3.12, it will work in python3.13", because every version uses
    a separate package tree. Upstream has effectively made every version separate. On top of that, the same "minor" version can have a PyPy variation and a "freethreading" variation now.

    --
    Best regards,
    Michał Górny


    How will this affect ebuilds that can use any version of Python 3? Will it need a giant or-block in DEPEND?


    Ebuilds are forbidden from depending on dev-lang/python directly.
    Eclasses take care of generating correct dependency strings.

    --
    Best regards,
    Michał Górny


    -----BEGIN PGP SIGNATURE-----

    iQFGBAABCgAwFiEEx2qEUJQJjSjMiybFY5ra4jKeJA4FAmcKYjQSHG1nb3JueUBn ZW50b28ub3JnAAoJEGOa2uIyniQO3SUH/3NXMGn62r/GwPTZCdiFCvuIEZFjve7F wRplst5WHuc+oKUA6karuEhBFFxTdBysp8/AFx+kGHi7YFuXoP8dxGv2Uw9ydPVf RXmtvvMGIlyW9WL0Jnr7gbnaqjXai23Raq9f25q4UgGwIDkAyTeG1SLFiPtz5hRN t+zt8UNqMDCsWYXDCl00ACKXIoYfTbS9taJBQ/AhX6RNxZ7E6pYwuC6fbla3WZaG lR3lTLskIotinKJtGXuOEZPYxXLjqLXj3m4kMp2UfzlSO/BXrTfdUuzA1Ifez0sa zaTR5Wg3ZA0GbDYE3PkUqD8tl631bq5w+1p932zZpTyfSdJcMNh/3pI=
    =b3yE
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mitchell Dorrell@21:1/5 to mgorny@gentoo.org on Sat Oct 12 13:30:02 2024
    On Sat, Oct 12, 2024, 06:23 Michał Górny <mgorny@gentoo.org> wrote:

    On Sat, 2024-10-12 at 12:13 +0200, Ulrich Mueller wrote:
    On Sat, 12 Oct 2024, Michał Górny wrote:

    IMHO this would abuse the package name for information that
    absolutely
    doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    In my opinion, it's the other way around. We have slots, that are a
    fit
    solution for packages that are roughly compatible between every major release, and we keep abusing them for every single thing we can bend enough to make it fit.

    So are you saying that Python versions aren't "roughly compatible"
    between releases? Like, they're a completely different language?

    They're not compatible in the sense "if I install package for
    python3.12, it will work in python3.13", because every version uses
    a separate package tree. Upstream has effectively made every version separate. On top of that, the same "minor" version can have a PyPy
    variation and a "freethreading" variation now.

    --
    Best regards,
    Michał Górny


    How will this affect ebuilds that can use any version of Python 3? Will it
    need a giant or-block in DEPEND?



    <div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Oct 12, 2024, 06:23 Michał Górny &lt;<a href="mailto:mgorny@gentoo.org">mgorny@gentoo.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0
    0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sat, 2024-10-12 at 12:13 +0200, Ulrich Mueller wrote:<br>
    &gt; &gt; &gt; &gt; &gt; &gt; On Sat, 12 Oct 2024, Michał Górny wrote:<br> &gt; <br>
    &gt; &gt; &gt; IMHO this would abuse the package name for information that absolutely<br>
    &gt; &gt; &gt; doesn&#39;t belong there. It belongs in PV or SLOT.<br>
    &gt; &gt; &gt; <br>
    &gt; &gt; &gt; To me it seems that you try to work around a problem (greedy upgrade<br>
    &gt; &gt; &gt; behaviour) that should really be solved in the package manager.<br>
    &gt; <br>
    &gt; &gt; In my opinion, it&#39;s the other way around.  We have slots, that are a fit<br>
    &gt; &gt; solution for packages that are roughly compatible between every major<br>
    &gt; &gt; release, and we keep abusing them for every single thing we can bend<br>
    &gt; &gt; enough to make it fit.<br>
    &gt; <br>
    &gt; So are you saying that Python versions aren&#39;t &quot;roughly compatible&quot;<br>
    &gt; between releases? Like, they&#39;re a completely different language?<br>

    They&#39;re not compatible in the sense &quot;if I install package for<br> python3.12, it will work in python3.13&quot;, because every version uses<br>
    a separate package tree.  Upstream has effectively made every version<br> separate.  On top of that, the same &quot;minor&quot; version can have a PyPy<br>
    variation and a &quot;freethreading&quot; variation now.<br>

    -- <br>
    Best regards,<br>
    Michał Górny<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">How will this affect ebuilds that can use any version of Python 3? Will it need a giant or-block in DEPEND?</div><div dir="auto"><div class="gmail_quote"><blockquote
    class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    </blockquote></div></div></div>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From orbea@21:1/5 to mgorny@gentoo.org on Sat Oct 12 16:00:01 2024
    On Sat, 12 Oct 2024 10:12:56 +0200
    Michał Górny <mgorny@gentoo.org> wrote:

    Hello,

    Historically, all versions of CPython were slotted in a single
    package, i.e.:

    dev-lang/python:3.N

    This approach has been causing a major annoyance for users -- due to
    Portage "greedy" upgrade behavior, any time a new Python version was keyworded, Portage insisted on installing it, even though user's
    selected targets did not request the specific version. The
    potentially worst consequence of that would be random user scripts
    stopping to work, as they suddenly start using new Python, while all
    their dependencies are still installed per PYTHON_TARGETS.

    Upstream has recently added freethreading support to CPython. Since
    this support is not ABI compatible with the regular build, we need to introduce a separate target for it, and to package it separately.
    In the planned patchset, I've already put it as a separate package
    (dev- lang/python-freethreading), because otherwise Portage would
    insist on upgrading to it!

    However, I think the cleanest way forward would be to stop slotting
    CPython like this, and instead have a separate package for each
    version, just like the vast majority of distributions do, i.e.:

    dev-lang/python3_N

    This naturally means that only the specific version requested (e.g.
    via targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose
    first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t

    (Alternatives: python-3_14, python-freethreading-3_14? Though I think following PYTHON_TARGETS is cleaner here.)

    As a side notice, the existing versions would probably remain as-is
    until removal, since there's really no gain in splitting them, given
    we'd have to retain compatibility with existing depstrings.

    Comments?


    Would you be willing to carry the LibreSSL patches in tree if you do
    this? Its already a serious chore keeping the python ebuilds in sync
    with ::gentoo and if you start to double the versions that will only be
    more ridiculous.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Andreas Sturmlechner@21:1/5 to All on Sat Oct 12 16:32:37 2024
    Copy: orbea@riseup.net (orbea)

    On Samstag, 12. Oktober 2024 15:52:45 MESZ orbea wrote:
    Its already a serious chore keeping the python ebuilds in sync
    with ::gentoo and if you start to double the versions that will only be
    more ridiculous.
    Life choices.
    -----BEGIN PGP SIGNATURE-----

    iQITBAABCgB9FiEESn1gz6RHOTQPAoX/ASQjMY0fts0FAmcKiIVfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDRB N0Q2MENGQTQ0NzM5MzQwRjAyODVGRjAxMjQyMzMxOEQxRkI2Q0QACgkQASQjMY0f ts1Nywv+MDY7BuCZyLuK3SantAXQ8SRjMEiNv07gioDd6Qi0iAKkZtRIefsxxn8v ZJs3ba9nMFW2PltJVrCd/4i2/yl3KHEYKkHQqnYT2FI0gvPtjwQL6hW+r9pkMMpJ sbVlywZyk9FulODizEY46FBzLLmU4hlCSDeKL2fFyNESK/wyZAwoW9O2+HMvw4ll 2FLO9u8kC8KMGqqw0hndj8OiYTkp6YHbA77vpTKUNpB7CnTHp7CJwYxcVqZHgkvh Oa/a2bchvRPSfirV7eIjQ6f5hS9mWRV+Hb65XyBT6lB/kwaRkXKqJJh/GqJq2Aw9 UF7GVezmeLyHE7AAtnGI08UZt/ZWgZjWOianYcMpGzE7UwIf9k76NILZtcCHSh+g mN10RFo46HRekvVL8FXnT5ST8BE0BW3jxN27bXwrMMg4SQ1XpMxj9mfhzEsYaX4v /U3GFdrVHeYv370H5iVNH+8GJMLviWwFet88q9vXXuH0qr1CeJFtytw5CZdAJ6x+
    OP2G7vSs
    =qIkB
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mitchell Dorrell@21:1/5 to mgorny@gentoo.org on Sat Oct 12 17:10:02 2024
    How will the upgrade path look, from e.g. 3.16 to 3.17? What will the
    typical Gentoo user experience be? What will the experience be for a Python developer with a local overlay containing custom Python packages?

    I didn't like this idea at first, but I'm warming up to it.

    On Sat, Oct 12, 2024, 06:05 Michał Górny <mgorny@gentoo.org> wrote:

    On Sat, 2024-10-12 at 11:59 +0200, Ulrich Mueller wrote:
    On Sat, 12 Oct 2024, Michał Górny wrote:

    However, I think the cleanest way forward would be to stop slotting CPython like this, and instead have a separate package for each
    version,
    just like the vast majority of distributions do, i.e.:

    dev-lang/python3_N

    That other distributions do it that way is not an argument because most other distributions don't have slots.

    This naturally means that only the specific version requested (e.g. via targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t

    IMHO this would abuse the package name for information that absolutely doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    In my opinion, it's the other way around. We have slots, that are a fit solution for packages that are roughly compatible between every major release, and we keep abusing them for every single thing we can bend
    enough to make it fit.

    Greedy upgrade behavior makes sense when you have packages where :=
    and :* operators are applicable. It doesn't make sense when every
    single dependency is expected to specify an explicit slot. In fact,
    when you are never supposed to depend on the package without specifying
    a slot, why would you think slots are the right solution?

    In fact, the "freethreading" variation already implies that there could
    be more than one "slot" per package version.

    It's as meaningless as having sqlite3 packaged as sqlite:3, or gtk that
    is now randomly split between gtk+:2, gtk+:3 and gtk:4.

    --
    Best regards,
    Michał Górny



    <div dir="auto"><div>How will the upgrade path look, from e.g. 3.16 to 3.17? What will the typical Gentoo user experience be? What will the experience be for a Python developer with a local overlay containing custom Python packages?</div><div dir="auto"><
    </div><div dir="auto">I didn&#39;t like this idea at first, but I&#39;m warming up to it.<br><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">On Sat, Oct 12, 2024, 06:05 Michał Górny &lt;<a href="mailto:mgorny@gentoo.org">
    mgorny@gentoo.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sat, 2024-10-12 at 11:59 +0200, Ulrich Mueller wrote:<br>
    &gt; &gt; &gt; &gt; &gt; &gt; On Sat, 12 Oct 2024, Michał Górny wrote:<br> &gt; <br>
    &gt; &gt; However, I think the cleanest way forward would be to stop slotting<br>
    &gt; &gt; CPython like this, and instead have a separate package for each version,<br>
    &gt; &gt; just like the vast majority of distributions do, i.e.:<br>
    &gt; <br>
    &gt; &gt;   dev-lang/python3_N<br>
    &gt; <br>
    &gt; That other distributions do it that way is not an argument because most<br>
    &gt; other distributions don&#39;t have slots.<br>
    &gt; <br>
    &gt; &gt; This naturally means that only the specific version requested (e.g. via<br>
    &gt; &gt; targets) would be installed, and no cross-slot autoupgrades would<br> &gt; &gt; happen.  Ideally, I&#39;d like to start doing that with Python 3.14 whose<br>
    &gt; &gt; first alpha is expected next week.  Depending on how they handle<br> &gt; &gt; freethreading, we&#39;d end up having the first or both of:<br>
    &gt; <br>
    &gt; &gt;   dev-lang/python3_14<br>
    &gt; &gt;   dev-lang/python3_14t<br>
    &gt; <br>
    &gt; IMHO this would abuse the package name for information that absolutely<br> &gt; doesn&#39;t belong there. It belongs in PV or SLOT.<br>
    &gt; <br>
    &gt; To me it seems that you try to work around a problem (greedy upgrade<br> &gt; behaviour) that should really be solved in the package manager.<br>

    In my opinion, it&#39;s the other way around.  We have slots, that are a fit<br>
    solution for packages that are roughly compatible between every major<br> release, and we keep abusing them for every single thing we can bend<br>
    enough to make it fit.<br>

    Greedy upgrade behavior makes sense when you have packages where :=<br>
    and :* operators are applicable.  It doesn&#39;t make sense when every<br> single dependency is expected to specify an explicit slot.  In fact,<br>
    when you are never supposed to depend on the package without specifying<br>
    a slot, why would you think slots are the right solution?<br>

    In fact, the &quot;freethreading&quot; variation already implies that there could<br>
    be more than one &quot;slot&quot; per package version.<br>

    It&#39;s as meaningless as having sqlite3 packaged as sqlite:3, or gtk that<br> is now randomly split between gtk+:2, gtk+:3 and gtk:4.<br>

    -- <br>
    Best regards,<br>
    Michał Górny<br>

    </blockquote></div></div></div>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Sam James@21:1/5 to Mitchell Dorrell on Sat Oct 12 17:20:02 2024
    Mitchell Dorrell <mwd@psc.edu> writes:

    How will the upgrade path look, from e.g. 3.16 to 3.17? What will the typical Gentoo user experience be? What will the
    experience be for a Python developer with a local overlay containing custom Python packages?

    It should be transparent because PYTHON_COMPAT will handle that as usual
    for a local repository.

    The upgrade thing will need testing just to make sure nothing odd
    happens though.


    I didn't like this idea at first, but I'm warming up to it.

    On Sat, Oct 12, 2024, 06:05 Michał Górny <mgorny@gentoo.org> wrote:

    On Sat, 2024-10-12 at 11:59 +0200, Ulrich Mueller wrote:
    On Sat, 12 Oct 2024, Michał Górny wrote:

    However, I think the cleanest way forward would be to stop slotting CPython like this, and instead have a separate package for each version, just like the vast majority of distributions do, i.e.:

    dev-lang/python3_N

    That other distributions do it that way is not an argument because most other distributions don't have slots.

    This naturally means that only the specific version requested (e.g. via targets) would be installed, and no cross-slot autoupgrades would happen. Ideally, I'd like to start doing that with Python 3.14 whose first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t

    IMHO this would abuse the package name for information that absolutely doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    In my opinion, it's the other way around. We have slots, that are a fit
    solution for packages that are roughly compatible between every major
    release, and we keep abusing them for every single thing we can bend
    enough to make it fit.

    Greedy upgrade behavior makes sense when you have packages where :=
    and :* operators are applicable. It doesn't make sense when every
    single dependency is expected to specify an explicit slot. In fact,
    when you are never supposed to depend on the package without specifying
    a slot, why would you think slots are the right solution?

    In fact, the "freethreading" variation already implies that there could
    be more than one "slot" per package version.

    It's as meaningless as having sqlite3 packaged as sqlite:3, or gtk that
    is now randomly split between gtk+:2, gtk+:3 and gtk:4.

    --
    Best regards,
    Michał Górny

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anna (navi) Figueiredo Gomes@21:1/5 to All on Sat Oct 12 19:30:01 2024
    --b26cc05b9dbbe6bb07d4dc1ce4a996423fdfab8effe14fc7160f82e9c383
    Content-Type: multipart/mixed;
    boundary=e650524d922d23df7ae259f607df4a55b10b80dfef5c2b91b09e79a00334

    --e650524d922d23df7ae259f607df4a55b10b80dfef5c2b91b09e79a00334
    Content-Type: multipart/alternative;
    boundary=ed450f9aa68dffff6d83239aa9a46aea370dfafb03cc8a22d736b84902b0

    --ed450f9aa68dffff6d83239aa9a46aea370dfafb03cc8a22d736b84902b0 Content-Transfer-Encoding: quoted-printable
    Content-Disposition: inline
    Content-Type: text/plain; charset=UTF-8

    IMHO this would abuse the package name for information that absolutely doesn't belong there. It belongs in PV or SLOT.

    To me it seems that you try to work around a problem (greedy upgrade behaviour) that should really be solved in the package manager.

    In my opinion, it's the other way around. We have slots, that are a fit solution for packages that are roughly compatible between every major release, and we keep abusing them for every single thing we can bend
    enough to make it fit.

    It's as meaningless as having sqlite3 packaged as sqlite:3, or gtk that
    is now randomly split between gtk+:2, gtk+:3 and gtk:4.

    SLOTs in my view, and in documentation descriptions, `ebuild(5)`, are
    listed as "a package that may need to have multiple versions co-exist". seemingly giving more semantics to package versions.

    such semantics don't exist in other distros, so they represent them with different packages. doing the same here feels like a hack, going around
    a limitation of the SLOT system, and not the ideal solution at all.

    i'd think instead looking for improving the SLOT system so that
    dependencies can be even more structurally declared would be the
    ideal solution, making different packages just breaks those semantics
    to work around it's limitations.

    In fact, when you are never supposed to depend on the package without specifying a slot, why would you think slots are the right solution?

    so yes i do think they're the right solution still, as they communicate
    "this is the same package, the same project, just a different version
    and this package needs *this* version". doing that is no different than DEPEND="=foo/nya-4.2"

    --ed450f9aa68dffff6d83239aa9a46aea370dfafb03cc8a22d736b84902b0--

    --e650524d922d23df7ae259f607df4a55b10b80dfef5c2b91b09e79a00334 Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename=68990292A7A98C5E.asc
    Content-Type: application/pgp-keys; charset=UTF-8

    LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUlOQkdOMWVrNEJFQURSZEZa cUgzM3JZay84eUhwblM0U25UUUlGZnNTN3hNUy9sSG9JWVBUcXVUK1RHL0dwClFOQnZxZXh0dDhS c1duQ1k2WEE1dEdNWVg3Y3V0VFBqRjg2WTJwWWJMbzd5N010L3hnZGhDeUYzeUZsSGdGWXIKL0R5 eFFlbVJoOHFISTBlTXQ1Y1VYR1NqekNEU2YrUzhZRlJiVUplOFE3clhNNDB4RVhvcUx1a04rM1Vk bUQxZQpuWTlVVk42TXYvbVJMQVJmS2lCUVpEaEJYUlJOdDdBMlpqUTdubkpEZnY3b3FZUXdhS1p0 QXNrcVc5OG93TnA3ClFYTzZjdWtuOFV3VlJVNUV2QW1Ec1I5YVZkYjQ0NnkrMEh1Qk56SHJqbjE0 dENZcFEwUzZFYkFmL1FBT09UemsKaENaZWtjUTVPVC9oWGZ3YkRmd1N0ZmM2RWI3Qi8yemNmVnlL aGR2emV1eTB2MlJRc0lPR0N1anRidWk0UE9RcApMcm0wTWh4SG1ZTTlEWlZQMW1CM3Vnd3JEcDRQ UVJVcmZaVlBWQmxQd25CbmxBMm5MMlFHbDFiSUxyblZCSXRCCjBuZCtMR0dub1JWTHV2aEdYTi9Z dHE4SU1aaUx0Y09QOUZJajRqSVZCRUZIalpubHI5dUNlMjZGUEN4Yno4UmMKZlhYeWZJTjhsVDdC K1p3VzVvRlVtVk5RN3c5NnZWZXdYZ3c3Yy9xNGlrRER0ZW9yZlQ1OVpXQ0laWUtDWnowTgpvaWha ZEF5NFlyTDFsN2JsSit5Y3I2QkZJejR5NmZnV1FGWCtQdUZJczdvSm1GUlBFMW5qN3dxT3pTa2xK WkFsCjRXcjVjTlZyTjlGTEsyOEpPMGFnZEgvbDBzd1ZZK3l0SktHQWhLb3NjTVFaZmY5SkdRM1k1 ODFaQndBUkFRQUIKdENWQmJtNWhJRVpwWjNWbGFYSmxaRzhnUjI5dFpYTWdQRzVoZG1sQWRteG9i QzVrWlhZK2lRSlhCQk1CQ2dCQgpBaHNCQlFzSkNBY0RCUlVLQ1FnTEJSWURBZ0VBQWg0QkFoZUFB aGtCRmlFRXJvN1hiczdNc25VTzRJZDJhSmtDCmtxZXBqRjRGQW1WZWtWOEZDUVBLU3BFQUNna1Fh SmtDa3FlcGpGNmxZUS8vWGxZaHNWeURnZXd3Ukl6R1E1TS8KK2o1bVZlVi9aRktPdUpCNWpOWkli ZFhkOEVkK25SSjROY0hGVUFEQ0VVVHpQRndqc3F6L0tjRmRjeHA0eWtNRQpZVHl2UVFBNGpRTXND enNsd3NmOG1yL010TTF5YUN5TCtGOG5GYWxFRnFhQnhCbEgveG8vNm9PeFNKMHlWdFpBCjRGSUZk NE9Wd0JaQXdvNjN5eTJHQ1QzTjBDVCthWlpBK1A1REl1UzdVZklBeWcyenpZdm1zMUlhbEV3N3Fy UlUKbG1paFpNSlVNQkxzLzI1YlBKdGlLTjNjc3E5L2tNWWwwSG9nMHo0ajE3NVBJeUVnVml3TWNB dGNFd3lQb2RSNAp5SjRYaHB5Q0huZC9DQjZPQU1WOXUwaENWL2NQaStNOHBkbm51dzFtZ2ZIYjZX TWZuQ1lad0tzcXFrMm9jYitICmdmQ3FrTXlZUWNxc0FCNUdSMmJaVktCY051eURiaVBRVmpNY2pJ dStERjU4aGppYjV4bjNkT2RXYVdQdG5ZRHcKNklYLzVhTGVEc3Fza3BVTWlvTWhYemJPWHA5ektD S0pqenJpWWxzMFoySXV2ZTZDWlJWL1daTVp5MXd2WEhoKwpSTWtVWkYzUE9sQldGQVNldzJyU0pP b0VkT2Uyd0YvU2JlUDhsWmYrcHdWKzBISWgzOXExR0FnNm0zRmpGTktPCnVZeW5QTzhlTG4zeDMy UVlra3pFbGNRc0xHZnVIbG5la3lZRFVYc1lkUDQ5TWNtWHc2VVZYdGhtSDRiWXluQXQKd0s4UUVr SzUrcWRoL0xJVWI5Q0sxdUdzTC9oUCtoK3lHTC80bk9CWjczS0J2OWJ2Rkp6c0xCa2pPbUV2N0N2 awpvaSs1My9IVkFFYUJqVDIxTVNEZlRlQzBMRUZ1Ym1FZ0tHNWhkbWtwSUVacFozVmxhWEpsWkc4 Z1IyOXRaWE1nClBHNWhkbWxBZG14b2JDNWtaWFkraVFKVUJCTUJDZ0ErQWhzQkJRc0pDQWNEQlJV S0NRZ0xCUllEQWdFQUFoNEIKQWhlQUZpRUVybzdYYnM3TXNuVU80SWQyYUprQ2txZXBqRjRGQW1W ZWtWOEZDUVBLU3BFQUNna1FhSmtDa3FlcApqRjRWQWhBQW1MRzk5NlE2QnZuVkVlVVFKdjlNQ2ZG THB3OVRvYUxnZjNXYnRYM3Bod21yVlZtUHd5T3NKODB6CkR3SlJ2YkQ2Wjg0ZkhKc0pBREpXR21u Mk13NEJSWURqWnhPYWFiZW5GeGdsUElqNzM2UHQ3Y2h5TXQ5Zlh3OE8KYUEyM21JTHM2QS96ME1D ZWJoWTU5dHo5bzd3eG03VzZydUwxdGEzdzRuSEQ2cTZhYWczaE00a2kzYUk4K3UyVQpFQ3Z3Vyty djA3VEd2c2tYMEZxSjhta0kveU8ySjMzcmZwWGFMNDgvUUt4NCtZZkdraExObGdTYytJU3lFT1hm ClY4QmR2S3ZoTXRWcnU4cjRYbEJkM1UyY0xweWk3MlZ5cFpmcExKSGJzRzhQM0VDZUZPWnlSamdv QlMzOEZRV2oKRWVWUnpDSENvdmxFOWZQSzVkZEtIck9ldysyOUlldzRWZ21Sc1BKOEhKdEE2Ky9T TDBqYUNsOVZkMmFPYzFJVgpxTWZsVWcrVi9zWHJXQy9tUXFPQWJuUEdrY21wNFBwWjlHY2l5bG9Q WGVyRWdMTlpJSWdWTkZKUGdkWnp4QlhjCkR4M2FzZ0UzaHg3Y2FaUWwzTW9CZlVKdFl6TU9RdTBo QUR3NXhxN2kvU0JKQTlUYW84Wnk4SFc2WXpQbXc2T28KTUNiUWxJZGxHS3hHalZUa2FmOGpqV3py bTdJcG1WWDA0aFI1SFE0UnhtRGdFSU0vUERuTVFQcGFNNGVsdWdhOApGR0RVNFU0ZFhIcFNWSDBX SzN6Q3pDcFhHNzI0VUVHaC9aK1hXZWNidk5id1prL0xvdzdiTFkxWkJjNlFoQ0V6CkFNVHdIN3JQ VVNpZmFYNm00aTk1Nm9iajlmdWVpVlB6cDJNMnVhMGRBYmdmUldicjdvRzVBUTBFWTN1RFJ3RUkK QUxReU9vcm8vRFZHTzV0RXJXdUJyd3BmY0lPMU8zT05iclV2UUYzQVZQbm5UV1o2NGVtaVJwbkVT ZWk4UUtBNAp0emdLSnZETDd0UVM3MlRrRllSaFh0djlWYm5VQk1VWHJCSFJDMkZwdWtMMFhoT29B dFd1TTRnWW0vVk16ditnCjV6eVBBbTR2ODVqRkpqOFdvbEJDOHA3Qm0yT3hWdWdvTVh5SFZxalFJ YTl5SHl0NVZJMzcyUGk1RzdPUStwK3MKTlFsdDdxZk1reElSMXNhMGFVRytKL1BIa0FTYXNVcis3 MkhKZVVOYjlZODZheFJsdWFKc1duSDF4R2ZDZlVWUApZNVd4OXdUZHQwdlA1TW54U0dEOFVzcTJQ cXpLTWRYa3pqN1dBZjBTT3NVWS90NlNrRHJ5Z1hLcjFaT2ZSTG8zCmk1UEVqaTlqcFFsY2lpZzVs UnRGV0FjQUVRRUFBWWtEMGdRWUFRb0FKZ0liQWhZaEJLNk8xMjdPekxKMUR1Q0gKZG1pWkFwS25x WXhlQlFKbFhwR3pCUWtEeEVIc0FhREExQ0FFR1FFS0FIMFdJUVE1QmtsRytSR2JHb1RkdzUvQgox T25Wck9oU21nVUNZM3VEUjE4VWdBQUFBQUF1QUNocGMzTjFaWEl0Wm5CeVFHNXZkR0YwYVc5dWN5 NXZjR1Z1CmNHZHdMbVpwWm5Sb2FHOXljMlZ0WVc0dWJtVjBNemt3TmpRNU5EWkdPVEV4T1VJeFFU ZzBSRVJETXpsR1F6RkUKTkVVNVJEVkJRMFU0TlRJNVFRQUtDUkRCMU9uVnJPaFNtbUR2Qi8wZmtC S1NTZmZiWkRsTTROK2hTMElzYTdYNQpXVXhMZDVhUkh3cENjeGh3RytsdG1zU0dYLzB0TGtwYmdh Tkoya0JSQ0pMbGQzTlVQYyswWEthbVZ4UUVXUysyCllnU3J1SWF5aHVMdXdCM0tTUFZGZ1N4TkNU VVhRczBuOUFTaWp6dlJPWS9NK3VGSHY0bjl1aVlSQ2ZtY3p3dnAKR3ZodWluYVBuOWNhWWFOUFh5 SXF4VTRBNTFlN1ZvM0dWRjF5eUlWR1JOK3RSQlJCZFAzeEJDRkYyYTZVOXRsNwpzaUJDQXJHWU1Q NTJjQlM3ZCsvV3hpaEVBQVFONTVNTm1Hc1dyVnQvaHRHRjhIam1rZ1B4T2FHakJYTWNtb3R1ClVt RjBSVFJtYmwrZElxZ05jZjZOM2h2NnlRcUNSaGp6UEMwMGw0MUlCblkwaktQQU5zZFpZOGV2MUw5 NUNSQm8KbVFLU3A2bU1YaDJmRUFDZTVXbzV6SnlMenZjek5BNWw2cmVGZWN0OEJtQkR2RWN6ckRa YVJmTVNWTzArTUxYWgpacFp5L0RSdGt2SG9qTlBXVzI4b0ZKUkNJUi9zaXg3cVY1aDNiRk5pbEkx Nmh3cVV5M1F2MXBqYWh4ZFdFYTNKCmJEOTJ3RDBVNkdia29UUFd5eXA2Tzkwdm94WmxOMnJGV2Q0 L29pTG8ySFBld1hEeXFDK3ptbjFxZThPV1h1MVIKMVdHMDliNGt5RUhNeWEyNTU4amNYMng5UXZR K1lzcWpyS1hTejNMaWVGQmRaU0g4VG5ja2Jyczd5Qi9PbCtKWQo0YlFUTWRQenpCK1FzSmpwWUc0 WGFLRWc3TUQxNW94Lyt1N25rT0VITnJuWHg4ZzVERldFSzFOYVF0UVBkT1dyCmRwZ3RReTQ1QUVy MHJUVFFuNVNHcjVUVXhWMEdJZDBodjlyZVhXcDc4Z3RFMDZCcDArcHlmNHhUU21mdVlpTTUKZUpZ bHhoTnp2K2lwaldMeTJ0Q3RsaDg1VUlITXZUQUJ2MGFFNC8zVjFTZUVqYnNiYU9COCtiWDUzakVk TFE3dgpCSkVDZUp3K2VIMTFaRzRoUlQ1WnJFVm1BWHJna2JhY0FTSkVwVTBSMUpJKzlKbW4wRWtm cnRYeVZxVEVjZm00CnY4akd4TkU2eEJkclZPL0JqWXNPczc1bmRQZjJ3RWdGZGJkUnlxcEVpZUls MlhsNitXOHlkak01YU94dE1TQnAKL3loK2ZqNm0xRTdrY3hwS0VCV3JEQnpwZ0cvZmhFRFVGZnM2 Sk0yaW96MllmNUFvQnlDVnNISTlXRVNZMWRxTwpFL0lMVGtqbGM5d3Z6bHJRNzg5VjNoSDhUdHNR Ym5qQnVMQUZsaGxjUHZDNHFpSkV3T3crTEVlbzFya0JEUVJqCmU0TnpBUWdBMFBtSklHcHhnYjlq Y1V5cTRWUHZYMXVuQ3lGdU0wcVBFMytaTUNSM3BVWWJTRGJSVE5DOWVlYXoKVURzWnBvSDhVNkhB UUhsNmxjZXB2cE56aWRvWGxJcXdHOG1NVEdxWHJ1WUFuQ2tEWnBld3VvdnFZR0hOVVpvMgpHTCt0 V3M0ZVdTVkRjcWtjaE9TZHBkSFZzaDdVZG5vai9odlpjY0ZsbUxwdGQ5MmJXR3NtOTVBenR5MTdX NjdICllmVmZhQlVXTmYzWVVuV01JVm0xSlVHSmdnVVh0Z0dLdjBrVGRzVnJZaEMwZk85VUhGTlY0 UzI1L0o5aGVjZFcKb3ArKzMrODdyTnl4WHN5elB1Y3Q1TXJSQW8zOUt2LzNZNXhnd01rL29RTkJI RHIrYmErU29yREdYdVJqVnNiRgphc1ExcVpoOTJSdE1vZ0o0dGJmd2w2WnV4WldkUlFBUkFRQUJp UUk4QkJnQkNnQW1BaHNNRmlFRXJvN1hiczdNCnNuVU80SWQyYUprQ2txZXBqRjRGQW1WZWtiUUZD UVBFUWNBQUNna1FhSmtDa3FlcGpGNUNFZy8vWVZlenN2aGQKYWxENEF1REtTcHoycVAxWHRTMU1W V1ZLRmVmYm8zanhKeHhsRytKL3VWc1RQU0E4MDdtN1JqMVdmcFhxdFVVRAppS3dlMHR0VERMaURU Z2FlTzhQY2wxazNodyswNituaXlFK1NldnlPV29RS0drYlIrREtaWnJzYmhKNm5RRTNuCnN0REM5 YWJ3TXZocVFCNlBhcDJ1Z1J2M1hicm5sYnozWUVsK2pBdnljTDA5UVRNM0k2QVJRNUhnTXFpL1NV ZzYKQlVsYy85VXNINk1wOXBudm41NDdpMFI5TFpKK2kxZFN5U3lVamZqRUZtT3lWNUNHU0VPT1Qx dzhJdzgzMkdDYQpxV2ptQ1A5V3hobnh6clZ1Qy83U3ZiNXpQaEFOOElkbit2dmJ0YVFIQ3FCZkQw UmMrblV5Z2RDTUFXZmNWUWphCmlOWE82aDdwQzNVcTJhcFJQRVluZ2ltZHZ0aVJVdlZRRnc3eVdt TTFDTzNOWDJYdGJYZTBXd21PWmNCZG01cFEKek9BOVRNSEUzaUF4R2Y4QS9TNUROb2dtbnRSUUpi V3p4b0dOcE90VENZOW1reEtDSjBZcit2ai85M3JoOHpOWApDVlNyZWdKTGJVYlNiUnczdE4rVzZG dmFkemgyZnlQYmZIU29LUzFidDJoVDF2TDNRbUxzUU5tWUJyTHI0Y3RpClFtclo1OUJWVmJmY1JD MjRuM2NpSmlLMmRzcGxJV0lFTWJrNnIzajljbkVKV3dYcFE3NVVueWlrTDd3MStvZ0oKZHUzYW8z WFMrSGpoQ0dJWVhsSWdkT3FOSDdnUmY2NS9yd3hpMGZWNFphL1hmb0dIcjdJZEVkYUYyWlJLcU81 MApjQVozdkpFL3c0bld6YmZzQXNDWUhacGJ5b0NsNHVHWkRmTzRNd1JqZTRVdEZna3JCZ0VFQWRw SER3RUJCMEE4CldGazdXRElta2REbk5PMFVaV2o1S09LSCsxQlE0d3FIWmdxRTE1KytjSWtDUEFR WUFRb0FKZ0liSUJZaEJLNk8KMTI3T3pMSjFEdUNIZG1pWkFwS25xWXhlQlFKbFhwRzBCUWtEeEVB R0FBb0pFR2laQXBLbnFZeGU0Y1lQL2lMSQpBc2hUYng2am9KUnBGckF2UUNFYVB3YlR3NFZ5cHY1 VllWa0dKTWsvZU1ZVWtxd3BRK3NnQXZGOFIzWXkxZyt0CmE3aFdTWjFyM0FJYm1mTWpNRUNPRG9L eW51NitwN0wrOXBKSCtMUURLZzdDV2pDd3lHTzBqSXVzK2lPWkpJeVUKUWRxYVRBamh3YmI3NEpY TWNjT3E3VGxyWk5CVTc4YWRBbWJxVm5uSG5ZVjRDamV2aUlNeTVQU1lIaFhSUUJaSgpSUTViSTV6 bEtieUVia1NTWGd1NVROSTJjL2d1QVBaelVnYTZET01Yd09tR0tCT3NTbHdzYUtYTHZyeVZIZ0Qy CnBLQ2V4WEZlZFhCRVJvS3duQ01oc2psSDBDU3MzU1JJdE1JUjlUYTAzWlFtRGNMWFZVQVZVOHFU MW5STGlETHMKN1krMlhxQktWay81UExLOUp2dEc0OWFlRk9OUWNFWlhKTHVwZk00bmFqbDhDUDZq cUlIRy9MMGZjNTdhWDdWYQp4OUwyZEdQK0Z5TmpMVDViNlZtZWdlMk5jSlRvazdLekVYT2R6d1FM NHBFNTFyYTc1a24vUHY1YmZZbmVxT1JBCktFdFF3ZGUzSG5rQW5jSktZaWdBNWg1M2d3MFp0Sjg1 UDA0azN2aC9kb3ZBYVVmUGNaMVNGQzdWY2prQjVoTTEKN3FoMFArcGpGeURqSlgrdnR6eEp4bStO cHM5OW5KcW0zTERHY1hUN1pFTFB0c1BKMHJ1MW1GS0pxdnRoTk85UgptcEkyelFGaFFLcDFqRSsx RFh1d29DQ1hNR29FTnVDRHB1alR5M3RPdVJENGJoQ0ZBVnIzTkd6OWNuYjhSL2lZCkFrRDIvUUYv WEdmQ29oRjM1ekNrL2tSZXNnYmlmNGNaKzRmMXdVQjAKPXd2WDMKLS0tLS1FTkQgUEdQIFBVQkxJ QyBLRVkgQkxPQ0stLS0tLQo= --e650524d922d23df7ae259f607df4a55b10b80dfef5c2b91b09e79a00334--

    --b26cc05b9dbbe6bb07d4dc1ce4a996423fdfab8effe14fc7160f82e9c383
    Content-Type: application/pgp-signature; name="signature.asc"

    -----BEGIN PGP SIGNATURE-----

    iQGiBAABCgCMFiEEOQZJRvkRmxqE3cOfwdTp1azoUpoFAmcKsAZfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDM5 MDY0OTQ2RjkxMTlCMUE4NEREQzM5RkMxRDRFOUQ1QUNFODUyOUEOHG5hdmlAdmxo bC5kZXYACgkQwdTp1azoUpoxkAf9EXdiE/7/aRL76rTDThZ/YXUtQ/P8SeqCRFfn nQIObJCrZ0ElkEPyRk8lh9155HRBETXDKWXGiKg3Wtp2GiZio3/7hj2JQAveRf60 lzSkguEee0x29oGo9WmPUh2X4wC8Do2cNiGRciLi/ERMAw01PEGkX9Cso6DcDgtE PLk/HRaIMbYU7+eDhr2RY8rUBJ1AF8jawozB7FbE0VqUR2afFTH+x0TNxtYHsYMo KOuRFsyWQuS+//RcYPrHtv3UgW/qkXrUvOXhfY4kwNm0M0rSvr6O6lefHi3pjzUe yXBfpnzuwJ3oK558JET/TKfFfckT91B7eBe2vse5NmKFsY8eXA==
    =drIx
    -----END PGP SIGNATURE-----

    --b26cc05b9dbbe6bb07d4dc1ce4a996423fdfab8effe14fc7160f82e9c383--

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Nowa Ammerlaan@21:1/5 to All on Sat Oct 12 19:40:01 2024
    On 12/10/2024 10:12, Michał Górny wrote:
    This approach has been causing a major annoyance for users -- due to
    Portage "greedy" upgrade behavior, any time a new Python version was keyworded, Portage insisted on installing it, even though user's
    selected targets did not request the specific version. The potentially
    worst consequence of that would be random user scripts stopping to work,
    as they suddenly start using new Python, while all their dependencies
    are still installed per PYTHON_TARGETS.

    I don't understand the problem. Say we have some custom user script with #!/usr/bin/python, then this still goes through the python-exec
    mechanism. That config file is protected, so some new python version
    cannot suddenly replace the /usr/bin/python without explicit action from
    the system administrator. So in what scenario exactly does the current
    behavior cause breakage?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?=@21:1/5 to All on Sat Oct 12 20:10:01 2024
    On Sat, 2024-10-12 at 10:12 +0200, Michał Górny wrote:
    This naturally means that only the specific version requested (e.g. via targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose
    first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t

    (Alternatives: python-3_14, python-freethreading-3_14? Though I think following PYTHON_TARGETS is cleaner here.)

    As a side notice, the existing versions would probably remain as-is
    until removal, since there's really no gain in splitting them, given
    we'd have to retain compatibility with existing depstrings.

    Comments?

    Given all the opposition, I retract this. While this doesn't really
    change anything per se, I get that you can't stand the idea that someone wouldn't use slots for something where slot use doesn't really improve anything, and in fact makes users' lives worse. When someone complains
    that Portage suddenly installs Python 3.13 freethreading or Python 3.14
    on their systems, it's on you.

    --
    Best regards,
    Michał Górny


    -----BEGIN PGP SIGNATURE-----

    iQFGBAABCgAwFiEEx2qEUJQJjSjMiybFY5ra4jKeJA4FAmcKueESHG1nb3JueUBn ZW50b28ub3JnAAoJEGOa2uIyniQOyOMIAMQueY7YIdgorToc3rkm2OCElpp8f3pV BKEZmJBRsnTTFB3x6jQM9lFX9e5zoVNRxzyxKlqLrvaXkbv3UPMhLIop2LD2sErx eZBe0hcH2rRHP03VoUczygHtosbNTOtKLvBmQ6vC5EB4DK3r+hvdFtAuKROO/CHX QJzfPz/kL2sqqpdLbrBEckE1KaAjS8Q+Cj546xDqmjkREor/Owq7MEv91Bkv5/8p 8MzInd6xv2IMHjMcVrd2pw0EcTIbB7zkPnEUXvZwPEx0MpgnNoAd1jdZpsIyiRdG 86d2vGdlz2nIOk9iOFGfl0XQW7sdhBRKaypqwaVrvbXdL5e46PdoWLU=
    =ZgVx
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mitchell Dorrell@21:1/5 to mgorny@gentoo.org on Sun Oct 13 01:10:01 2024
    On Sat, Oct 12, 2024, 14:03 Michał Górny <mgorny@gentoo.org> wrote:

    On Sat, 2024-10-12 at 10:12 +0200, Michał Górny wrote:
    This naturally means that only the specific version requested (e.g. via targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose
    first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t

    (Alternatives: python-3_14, python-freethreading-3_14? Though I think following PYTHON_TARGETS is cleaner here.)

    As a side notice, the existing versions would probably remain as-is
    until removal, since there's really no gain in splitting them, given
    we'd have to retain compatibility with existing depstrings.

    Comments?

    Given all the opposition, I retract this.


    I hope my questions weren't interpreted as opposition. I'm mostly neutral, perhaps leaning a bit in favor.

    When someone complains that Portage suddenly installs Python 3.13
    freethreading or Python 3.14 on their systems, it's on you.

    --
    Best regards,
    Michał Górny


    I like slots for saying "these are different versions of the same
    fundamental package, which you might want to install simultaneously,
    because dependent packages may or may not need a specific version.", so
    yes, on paper I agree that slots feel correct for different Python
    versions. However, if there's another aspect of compatibility
    (freethreading vs. non-freethreading), then I understand that slots don't handle that well, and neither do USE flags.

    I would _love_ to have something in between slots and USE flags -- perhaps
    call them VARIANT flags, where differing combinations of VARIANT flags can
    be installed simultaneously, but without carrying any implication of one VARIANT combination being "newer" than another. This would be fantastic for multilib systems that want different USE flags for x86 and amd64 builds (my 64-bit software stack GREATLY inflates my otherwise-minimal 32-bit stack).
    As another example, sci-chemistry/gromacs offers MPI support for clustering capabilities, but this actually impairs performance when running on a
    single machine, so there's good reason to desire installing both
    simultaneously (the ebuild already handles simultaneous single-precision
    and double-precision builds).

    This would be a major change to Portage, however, and I imagine we still
    need a short-term solution even if the VARIANT idea is embraced and
    implemented rapidly.

    Perhaps a pair of USE flags could control the compiling/installation of freethreading and non-freethreading builds, with a REQUIRED_USE mandating
    at least one of them? If not, I think separate packages might be the best (interim) solution unless/until a new Portage feature is implemented to
    handle it all more elegantly.

    -MD

    <div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Oct 12, 2024, 14:03 Michał Górny &lt;<a href="mailto:mgorny@gentoo.org">mgorny@gentoo.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0
    0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sat, 2024-10-12 at 10:12 +0200, Michał Górny wrote:<br>
    &gt; This naturally means that only the specific version requested (e.g. via<br>
    &gt; targets) would be installed, and no cross-slot autoupgrades would<br>
    &gt; happen.  Ideally, I&#39;d like to start doing that with Python 3.14 whose<br>
    &gt; first alpha is expected next week.  Depending on how they handle<br>
    &gt; freethreading, we&#39;d end up having the first or both of:<br>
    &gt; <br>
    &gt;   dev-lang/python3_14<br>
    &gt;   dev-lang/python3_14t<br>
    &gt; <br>
    &gt; (Alternatives: python-3_14, python-freethreading-3_14? Though I think<br> &gt; following PYTHON_TARGETS is cleaner here.)<br>
    &gt; <br>
    &gt; As a side notice, the existing versions would probably remain as-is<br> &gt; until removal, since there&#39;s really no gain in splitting them, given<br>
    &gt; we&#39;d have to retain compatibility with existing depstrings.<br>
    &gt; <br>
    &gt; Comments?<br>

    Given all the opposition, I retract this.</blockquote></div></div><div dir="auto"><br></div><div dir="auto"></div><div dir="auto">I hope my questions weren&#39;t interpreted as opposition. I&#39;m mostly neutral, perhaps leaning a bit in favor.</div><div
    dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When someone complains that Portage suddenly installs Python 3.13 freethreading or Python
    3.14 on their systems, it&#39;s on you.<br>

    -- <br>
    Best regards,<br>
    Michał Górny</blockquote></div></div><div dir="auto"><br></div><div dir="auto"></div><div dir="auto">I like slots for saying &quot;these are different versions of the same fundamental package, which you might want to install simultaneously, because
    dependent packages may or may not need a specific version.&quot;, so yes, on paper I agree that slots feel correct for different Python versions. However, if there&#39;s another aspect of compatibility (freethreading vs. non-freethreading), then I
    understand that slots don&#39;t handle that well, and neither do USE flags.</div><div dir="auto"><br></div><div dir="auto">I would _love_ to have something in between slots and USE flags -- perhaps call them VARIANT flags, where differing combinations of
    VARIANT flags can be installed simultaneously, but without carrying any implication of one VARIANT combination being &quot;newer&quot; than another. This would be fantastic for multilib systems that want different USE flags for x86 and amd64 builds (my
    64-bit software stack GREATLY inflates my otherwise-minimal 32-bit stack). As another example, sci-chemistry/gromacs offers MPI support for clustering capabilities, but this actually impairs performance when running on a single machine, so there&#39;s
    good reason to desire installing both simultaneously (the ebuild already handles simultaneous single-precision and double-precision builds).</div><div dir="auto"><br></div><div dir="auto">This would be a major change to Portage, however, and I imagine we
    still need a short-term solution even if the VARIANT idea is embraced and implemented rapidly.</div><div dir="auto"><br></div><div dir="auto">Perhaps a pair of USE flags could control the compiling/installation of freethreading and non-freethreading
    builds, with a REQUIRED_USE mandating at least one of them? If not, I think separate packages might be the best (interim) solution unless/until a new Portage feature is implemented to handle it all more elegantly.</div><div dir="auto"><br></div><div dir="
    auto">-MD</div><div dir="auto"></div></div>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Sam James@21:1/5 to mgorny@gentoo.org on Mon Oct 14 02:50:01 2024
    Michał Górny <mgorny@gentoo.org> writes:

    Hello,

    Historically, all versions of CPython were slotted in a single package,
    i.e.:

    dev-lang/python:3.N


    I feel like this whole thing happened so fast I didn't have a chance to
    comment properly. I understand you've retracted it but I'd like to add
    some context and background and so on for future reference anyway.

    This approach has been causing a major annoyance for users -- due to
    Portage "greedy" upgrade behavior, any time a new Python version was keyworded, Portage insisted on installing it, even though user's
    selected targets did not request the specific version. The potentially
    worst consequence of that would be random user scripts stopping to work,
    as they suddenly start using new Python, while all their dependencies
    are still installed per PYTHON_TARGETS.


    This is bug #702806 which happens with python-any-r1 which has an
    any-of dependency on dev-lang/python. That's why we don't see it with
    e.g. Qt. It's a bit annoying but not terrible.

    Upstream has recently added freethreading support to CPython. Since
    this support is not ABI compatible with the regular build, we need to introduce a separate target for it, and to package it separately.
    In the planned patchset, I've already put it as a separate package (dev- lang/python-freethreading), because otherwise Portage would insist
    on upgrading to it!


    It wouldn't! See above.

    It would, however, if we made it eligible for python-any-r1, but to be
    honest, I think we should exclude the freethreaded build from that. It's
    all risk (and/or downsides) with no real gain, as I don't expect a whole-freethreaded system is going to be possible any time soon anyway.

    However, I think the cleanest way forward would be to stop slotting
    CPython like this, and instead have a separate package for each version,
    just like the vast majority of distributions do, i.e.:

    dev-lang/python3_N


    As others have noted, such a proposal needs specific arguments as to why
    SLOTs aren't a good fit. I agree with you that they're not always a good
    fit -- SQLite and libxml2 are good examples you gave downthread, but
    the onus is on the one making the proposal.

    Now, for Python, there's a few disadvantages:
    * losing the ordering on PV for e.g. has_version (we could add a helper
    in python-utils-r1 for this);

    * losing the ability to consistently set package.use/package.env for all Pythons, like always enabling PGO or tests;

    * disruption to scripts which have reasonably assumed we'd always have a dev-lang/python (we'd need to do something like we have planned for
    pkgmoves, I think -- make Portage know about it and suggest alternatives intelligently/rewrite it transparently when given as an argument).


    This naturally means that only the specific version requested (e.g. via targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose
    first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t


    It's worth noting that we *do* this for pypy, but we retain
    dev-python/pypy3. I'm not a huge fan of it there but I know why we have
    it -- so that one can test new versions of pypy in parallel even when
    they supply the same implementation/version of the Python language.

    (Alternatives: python-3_14, python-freethreading-3_14? Though I think following PYTHON_TARGETS is cleaner here.)

    As a side notice, the existing versions would probably remain as-is
    until removal, since there's really no gain in splitting them, given
    we'd have to retain compatibility with existing depstrings.

    Comments?

    thanks,
    sam

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?=@21:1/5 to Sam James on Mon Oct 14 05:50:01 2024
    On Mon, 2024-10-14 at 01:43 +0100, Sam James wrote:

    However, I think the cleanest way forward would be to stop slotting
    CPython like this, and instead have a separate package for each version, just like the vast majority of distributions do, i.e.:

    dev-lang/python3_N


    As others have noted, such a proposal needs specific arguments as to why SLOTs aren't a good fit. I agree with you that they're not always a good
    fit -- SQLite and libxml2 are good examples you gave downthread, but
    the onus is on the one making the proposal.

    Now, for Python, there's a few disadvantages:
    * losing the ordering on PV for e.g. has_version (we could add a helper
    in python-utils-r1 for this);

    I don't get this. You can't use has_version directly without specifying
    the slot, because it's going to match different versions. And there's
    no real difference between specifying a slot and a different package
    name.

    Well, unless you mean doing a meaningless has_version match for the sake
    of it. Then, yes, unslotting fixes that -- i.e. removes that ability.

    * losing the ability to consistently set package.use/package.env for all Pythons, like always enabling PGO or tests;

    We aren't losing it, you just need to repeat it. Just like right now
    you can apply these per-slot or restrict version ranges, so there's no guarantee of consistency either.

    * disruption to scripts which have reasonably assumed we'd always have a dev-lang/python (we'd need to do something like we have planned for
    pkgmoves, I think -- make Portage know about it and suggest alternatives intelligently/rewrite it transparently when given as an argument).

    Yes, this is a fair point, and the logic in pkgcheck is pretty horibble,
    so I guess going for slotting just to avoid having to fix that
    and deploy the fix makes sense.

    This naturally means that only the specific version requested (e.g. via targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose
    first alpha is expected next week. Depending on how they handle freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t


    It's worth noting that we *do* this for pypy, but we retain
    dev-python/pypy3. I'm not a huge fan of it there but I know why we have
    it -- so that one can test new versions of pypy in parallel even when
    they supply the same implementation/version of the Python language.

    Technically, we could merge PyPy into a single package, as long as we
    use verisons such as 2.7.7.3.17:2.7, 3.10.7.3.17:3.10, etc.


    --
    Best regards,
    Michał Górny


    -----BEGIN PGP SIGNATURE-----

    iQFGBAABCgAwFiEEx2qEUJQJjSjMiybFY5ra4jKeJA4FAmcMlMUSHG1nb3JueUBn ZW50b28ub3JnAAoJEGOa2uIyniQO70oH/iUXRFSCYUhd6pEhps15hNUehYQBcm3V wbEDlb2YXHgBmRFQDGjSdoGbCYnnotKgDnNE/ux4EeUvL8oqQIs5kmt7APj1A7KW Pcum0mx39nYszHqYjU9W1GIdrD67Ib7sThwtz7iwyD+QDDtPjCo8aSyzJ0FNXCn7 dxchN94Bm3EJghr1RSJojZxYdRgN7m7L1a3J/l+M4nbIAkqfuL0CaF28LlHVDtqI lgyfXw+iupDZgZ3jM1Sk+A58yfUFv+cGULRnxnJt7SFxDD/cDAmIs7k+dr2xV/U2 zpvXwFrswe5FAXBe9iPbXGyuuaX9v94PE9W17LwsWj+W92YgBR+z2gM=
    =XpRk
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Sam James@21:1/5 to mgorny@gentoo.org on Mon Oct 14 06:10:01 2024
    Michał Górny <mgorny@gentoo.org> writes:

    On Mon, 2024-10-14 at 01:43 +0100, Sam James wrote:

    However, I think the cleanest way forward would be to stop slotting
    CPython like this, and instead have a separate package for each version, >> > just like the vast majority of distributions do, i.e.:

    dev-lang/python3_N


    As others have noted, such a proposal needs specific arguments as to why
    SLOTs aren't a good fit. I agree with you that they're not always a good
    fit -- SQLite and libxml2 are good examples you gave downthread, but
    the onus is on the one making the proposal.

    Now, for Python, there's a few disadvantages:
    * losing the ordering on PV for e.g. has_version (we could add a helper
    in python-utils-r1 for this);

    I don't get this. You can't use has_version directly without specifying
    the slot, because it's going to match different versions. And there's
    no real difference between specifying a slot and a different package
    name.

    Well, unless you mean doing a meaningless has_version match for the sake
    of it. Then, yes, unslotting fixes that -- i.e. removes that ability.

    Not for the sake of it, I was thinking of:

    if has_version >=dev-lang/python-3.10 ; then
    # Skip bogus tests relying on legacy behaviour
    fi

    but of course, that doesn't work for pypy, which I forgot about ;)


    * losing the ability to consistently set package.use/package.env for all
    Pythons, like always enabling PGO or tests;

    We aren't losing it, you just need to repeat it. Just like right now
    you can apply these per-slot or restrict version ranges, so there's no guarantee of consistency either.

    You can't wildcard on it, though, so you have to explicitly list it
    for all Pythons. I'm not sure what you mean by the consistency point.

    You can restrict it right now if you want to via slot or version ranges,
    but we have no way of doing a wildcard on package name?

    (I actually think we could do with wildcard matching on version at
    least in /etc/portage but finding some syntax which is free for it isn't
    easy. It would be useful for e.g. masking .0 kernels.)


    * disruption to scripts which have reasonably assumed we'd always have a
    dev-lang/python (we'd need to do something like we have planned for
    pkgmoves, I think -- make Portage know about it and suggest alternatives
    intelligently/rewrite it transparently when given as an argument).

    Yes, this is a fair point, and the logic in pkgcheck is pretty horibble,
    so I guess going for slotting just to avoid having to fix that
    and deploy the fix makes sense.

    This naturally means that only the specific version requested (e.g. via
    targets) would be installed, and no cross-slot autoupgrades would
    happen. Ideally, I'd like to start doing that with Python 3.14 whose
    first alpha is expected next week. Depending on how they handle
    freethreading, we'd end up having the first or both of:

    dev-lang/python3_14
    dev-lang/python3_14t


    It's worth noting that we *do* this for pypy, but we retain
    dev-python/pypy3. I'm not a huge fan of it there but I know why we have
    it -- so that one can test new versions of pypy in parallel even when
    they supply the same implementation/version of the Python language.

    Technically, we could merge PyPy into a single package, as long as we
    use verisons such as 2.7.7.3.17:2.7, 3.10.7.3.17:3.10, etc.

    Ah, good point.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)