-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Resurrecting libconda
for better downstream stories
#11925
Comments
Thanks @jaimergp! I have one question at a technical level. Is most of the technical debt with respect to deprecations in the CLI sections of the code or in the parts of the code that would go into |
I'd say there's technical debt all over the place 😬 |
For the record, conda releases were not SemVer (e.g. see number of 4.x releases and the fabled Also, while I wished we would have had this discussion while reviewing and voting on CEP 8, I'm glad for bringing this up, @jaimergp and @wolfv! I'm yet to see a clearly spelled out reasoning why the CalVer releases can't be used as a basis for 3rd party tools. I'm inviting you to read other people's opinion on why SemVer will not save you from Hyrum's Law. Besides the abstract discussion, there is an added complication: With the work on plugin hooks, conda would be tricky to decompose in a way that allows plugins to exist at the same time next to Both strategies are sensible on their own, but follow different goals:
We've known about plugin use cases for a while and have received many requests over the years, which triggered the work on them (now being in phase 2). For a reusable version of conda, I don't think I've seen a list of use cases though, which is why I'd suggest to NOT start from the past libconda (which seemed to have taken a broad approach). But instead start collecting actual use cases we need today and the future, before we overcommit to decomposition into "library" and "UI" just for simplicity's sake. |
This is somewhat related to #11234 (adding to the context above) |
I think if the deprecation cycle is properly followed, pinning ~6 months into the future might work well enough for mamba's use case. If there is a plugin API defined, then that is probably going to have a positive impact on conda's "stability" and deprecation cycles. So I was actually somewhat convinced that CalVer might work just as well as SemVer in this case. |
Nice idea. Getting there (libmamba) from here is the question, we don't have a superb set of objects to expose to the outside world the way that conda is factored now. |
I'm putting this into the backlog to have a larger discussion around this at some point. |
Hi there, thank you for your contribution! This issue has been automatically marked as stale because it has not had recent activity. It will be closed automatically if no further activity occurs. If you would like this issue to remain open please:
NOTE: If this issue was closed prematurely, please leave a comment. Thanks! |
not stale |
Continues at #13789, where we can focus on the implementation details. |
Checklist
What is the idea?
With the introduction of CalVer based releases, there was a discussion about API guarantees for projects that depend on
conda
as a library, not as a CLI tool. While the deprecation cycle can be used as an approximation of API changes (6 months or so) for dependency pinning, it's not an ideal solution.One potential idea was to create a library
libconda
to encapsulate most of the objects that might be required downstream. This is not a new idea, though, sincelibconda
already existed for conda v4.0:free
(old defaults)However, it was slowly abandoned.
libconda
was never a dependency ofconda
and it had to manually kept in sync (source).What I am suggesting now is to recover this idea but, this time, use it within
conda
! Thanks to the vendoring mechanism implemented à la pip,conda
can vendorlibconda
as it does with other libraries. Projects will be able to pinlibconda
as a dependency more freely since it won't affectconda
itself.For this to make sense maintenance-wise,
libconda
would need to follow semver. It's ok if it breaks often and as needed byconda
, since now downstream can pin to whatever version is needed (or even vendor, likeconda-lock
does), but it needs to follow the semver rules.I am not sure what would go into
libconda
, but the previous version had basically everything but the CLI. I'd start with:conda.base.context
conda.models
conda.core
Why is this needed?
Better maintenance story downstream. Note this includes both community projects (mamba, conda-lock, grayskull) but also Anaconda projects (conda-build, constructor), to name a few!
What should happen?
A project should be able to depend on
libconda
in a API-predictable way or, at least, in a way that doesn't restrictconda
's release cycle.Additional Context
bash: __add_sys_prefix_to_path: command not found...
when running anymamba
command mamba-org/mamba#1950conda
is installed in a non-base environment, Windows CMD will treat that environment it asbase
once active #11519 (example ofconda
dep issues outsidebase
)Tagging people who were part of the discussion or might have a say as maintainers of downstream tools that depend on
conda
: @beckermr @wolfv @marcelotrevisani @mariusvniekerkThe text was updated successfully, but these errors were encountered: