On Thursday 17 March 2016 11:55:31 Bill Nottingham wrote:
Kamil Dudka (kdudka(a)redhat.com) said:
> > If you care about a consistent developer, user, and debugging experience
> > regardless of mechanism of delivery, you wouldn't do this in the first
> > place, or you'd change the global curl package. Either the features are
> > important, or they aren't.
>
> Are you implying that curl maintainers know better than users which
> features are important for the users themselves?
... well, that's sort of what turning off features for this case implies.
> > If you care about minimizing size overall (neglecting the fact that
> > cutting out kerberos and to a lesser extent ldap dependencies don't
> > really
> > save you anything due to their system library use), then might as well
> > just
> > start -Os-ing random packages and throwing in busybox.
>
> Micro-optimization is way to hell. The system needs to optimized by
> design.
EXACTLY! Maybe I'm not being clear in what I'm trying to say, but this is
the point - it needs to be designed.
1) Start with the design of who are we targeting - what jobs are then trying
to do?
2) Then, what do we produce? (Atomic, Server, Cloud, Workstation)
3) Do they have different needs? Do we build components with different
features for each? (This solution implies 'yes', but I don't recall seeing
that stated before)
4) If so, what are the differentiating features that require different
components with different feature sets? What's the job that someone is
trying to do that requires this? (The impliciation is 'download the base
image somewhat faster', but that's still very vague.)
5) Then, pick the targeted points and propose implementation of individual
features that serve the larger goal.
The motivation behind this effort is pretty straightforward. I have been
maintaining curl in Fedora/RHEL since 2009. From time to time users ask me
to reduce the number of run-time dependencies of (lib)curl.
At the same time, users are continuously requesting to add new features to
Fedora (lib)curl and this introduces additional run-time dependencies. The
last request, which actually triggered this effort, was adding the support
for libpsl, which itself requires libicu and libstdc++:
https://bugzilla.redhat.com/1305701#c1
I wanted to provide a solution to the continuously growing list of (lib)curl
run-time dependencies. Having two builds of the same source code that just
differ in their build-time configuration sounded like a good trade-off from
the perspective of a maintainer:
- one suitable for the users that request adding new features
- one suitable for the users that request reducing the run-time dependencies
I am open to discuss what features should be included in (lib)curl-minimal
and I already refined my draft base on the discussion in this thread.
I am also open to discuss other solution to the above problem. The other
proposals I have captured in this thread are:
- use dlopen() -- already proven wrong (see RHBZ and upstream ML)
- use static linking -- sub-optimal due to high security advisory rate
- multiple libcurl DSOs on a system -- problematic (see RHBZ and upstream ML)
- tweak dnf to use libcurl-minimal if installed in parallel to libcurl -- not
a generic enough solution for me to consider (as it would work for dnf only)
It's possible that, just poking my head up, I missed all the 1-4
discussion
that this is tied to. But given that the following has all popped up in
the past few months:
- "Minimizing the fedora docker base image footprint" (by yanking dnf et.al.
into a seprate container, making size of it much more irrelevant) - "DNF
into C initiative started" (enabling a much larger depythoning that doesn't
require differing library buidls)
- "F24 Self Contained Change: System Python"
... the fact that we now have four separate implementation details, all of
which could make different parts of the others irrelevant, makes me wonder
about the design behind it.
So what exactly are you proposing?
Kamil
> Bill