Nice feedback! I've managed to digest a half of it, so let me react to the
first half and I will try to follow up with the rest later. :-)

I don't know Solaris IPS (I'll definitely have a look), but from what I
understood, it looks like they are delivering system components as multiple
repositories. Each repo delivers a component which you can install in "many
ways" using something called facets - like devel facet, docs facet, etc.

In modularity, we are also (kind of) delivering multiple repositories [1] -
even though we are still using RPM packages as a delivery mechanism - (we
call these modules) and we can also install them in different way using
something called "install profiles". Install profiles define a set of
packages from a given module that will be installed on your system. So you
could have a "default" install profile, "devel" one for -devel packages,
"docs" one for -docs packages, "lang-en_GB" for language, etc. You would be
able to install one or more install profiles. We would still (at least for
now) use RPM as a delivery mechanism, but from my understanding, it could
achieve very similar results.

Modules are defined by modulemd [2] - including list of packages, install
profiles, etc.

What do you think?

Cheers!
Adam

[1] https://asamalik.fedorapeople.org/modularity-building.jpg
[2] https://pagure.io/modulemd/blob/master/f/spec.yaml




On Thu, Mar 23, 2017 at 9:02 AM, Tomasz Kloczko <kloczko.tom...@gmail.com>
wrote:

>
> OK. Will try to write longer comment :)


> Looks like more or less Modularity people are trying to solve problems
> already solved in Solaris IPS mediators which allows solve
> problems of delivery software in different versions/variants.
> Trying to solve such dilemmas by manage as well software which is not
> delivered as regular package probably will break completely as
> software in working state as non-packaged software will not have proper
> requires/provides description.
> IPS trying to solve such problems is using know from Linux alternatives
> management + dependency resolver.
> Highly likely solving multiple versions software delivery issues on top of
> raw rpm packages (as they are now) will end up big mess
> behind. In other words such support IMO must be anchored way deeper into
> PM like it was done in IPS.
> Another issue is that some level of flexibility manipulation of versions
> of some components may be working only in strictly controlled
> sets of versions of the software.
> Deliver such such baselines is solved in IPS by incorporations idea which
> is mechanism guarantee consistency on some exact areas where
> delivery of alternatives is possible. Single incorporation simple locks
> all possible to install packages on exact version and releases.
>
> At the moment similar locking is done in rpm based distros like Fedora is
> done by delivery whole distribution. However all internal
> dependencies inside exact distro version are based only on
> serial:version-release(arch) dependencies and there is no mechanism which
> will start delivery alarms or will not allow to install anything from
> other versions of the distribution.
> There is no in current rpm based approaches mechanisms allowing make
> upgrade from distribution version N to version N+1 with
> signalisation that some already installed packages are/will be breaking
> dependencies encircled on areas on which exact distribution
> packages have been tested together,
>
> Generally delivery packaged software in multiple versions on top of
> packages like rpm will be really hard if not impossible, as long
> each variant adds yet another dimensions the same stuff which needs to be
> delivered.
>
> This is why IPS completely moved away from packages delivered in form
> archives and switched to serving software in form of
> repositories.
>
> IPS mediators + facets ideas really solves Modularity problems and few
> other things as well.
> Surprisingly something like IPS facet idea in some very limited form is
> available on top of rpm.
> For example at the moment is possible to choose install everything with or
> without documentation (rpm exclude doc mechanism) which is
> basing on %doc tokens in %files sections. The same is with choosing
> languages/locale dependent files basing on %lang() tokens.
> In each of those two "dimensions" are used "dimension" specific %files
> tokens. In other words in rpm world is possible to choose within
>  only those two defined "dimensions".
> The same possibility of customisation in case of IPS is delivered in more
> general way in form of facet like doc=[true|false],
> locale.<lang_name>=[true|false], The same file in package description can
> be marked using multiple facets as well. Something ca e
> documenttion in exact language.
>
> How this approach may be used on some other areas?
> One example: someone on top of typical system want to compile something
> because additionally software must be tsted "in situ". Choosing
> some exact set of -devel packages to install to start compiling some
> software? No .. just "pkg change-facet devel=true" and within few
> minutes ALL already installed pakages will be enreached by adding all
> files with devel=true facet.
> On Solaris there is no separated devel packages!!!!
>
> This beautifully as well interacts with AI (Automated installer) manifest
> where on specifying installation of the system with exact
> attributes is possible nicely described this by:
>
>     <software type="IPS">
>       <destination>
>         <image>
>           <facet set="false">facet.doc.html</facet>
>           <facet set="false">facet.doc.pdf</facet>
>           <facet set="false">facet.locale.*</facet>
>           <facet set="true">facet.devel</facet>
>           <facet set="true">facet.locale.en</facet>
>           <facet set="true">facet.locale.en_GB</facet>
>         </image>
>       </destination>
>
> Solving problems of moving around software in form of archives? No problem
> 'software type="ARCHIVE"' (Unified ARchive). For example
> initial version of OpenStack packages on Solaris where provided as UAR.
> Example from my first experiments with OpenStack trying to use it by
> install and setup this software over AI manifest and profile:
>
>     <software type="ARCHIVE">
>       <source>
>         <file uri="http://<hostname>/AI/sol-11_3-openstack-x86.uar"/>;
>       </source>
>       <destination>
>         <image>
>           <facet set="false">facet.devel</facet>
>           <facet set="false">facet.doc.html</facet>
>           <facet set="false">facet.doc.pdf</facet>
>           <facet set="false">facet.locale.*</facet>
>           <facet set="true">facet.locale.en</facet>
>           <facet set="true">facet.locale.en_GB</facet>
>         </image>
>       </destination>
>
> Back to example with compiling something on top of regular system ..
> So .. software has been compiled and we have now binaries.
> OK. Another command "pkg change-facet devel=false" and all devel stuff is
> removed. Someone want to have an access to documentation
> during development process? .. easy to guess "pkg change-facet
> 'doc*=true'" (there are few doc* facets used in Solaris packages).
> It is possible to add dependencies on facet dependent files.
>
> Few days ago bugs in build-id infrastructure which is now integrated
> within each rpm packages kicked hardly. Good that it has been
> already solved (partially).
> Generally build-id tries to solve delivery of debuginfo packages/resources
> for exact and matching versions-releas(arch) for example
> core dumping binaries (https://bugzilla.redhat.com/show_bug.cgi?id=1433837
> are some of my comments how build-id could be still
> simplified if it would be relaying more on packages database). However
> some bugs are still around (https://bugzilla.redhat.com/show_bug
> .cgi?id=1434235)
>
> So how such problem cold be solved using IPS approach? Simple by
> debuginfo=true facet on exact set of packages. PM software will find
> exact files which needs to be installed on the system. All without
> hardcoding as it is now within additional ELF section build-id
> hashes.
> In repository exact packages will exist with debuginfo=true files however
> on exact system image those files may or may not be installed
> depends on facet debuginfo=[true|false] state. By addng dependencies
> between debuinfo resources in the same way as between regular rpm
> packages is possible to 100% reuse dependencies resolver.
>
> As I've mentioned rpm allows use only two facets-like types of tagging.
> Solaris uses more than two hundreds.
> Typical dilemma of cutting system image to absolute minimum is solvable by
> facets customisation without changing set of installed
> packages. No doubts that something like extreme cutting off used disk
> space will fail because will not allow to new states of facets
> with breaking some dependencies.
>
> ---- *** ----
>
> What I'm trying to tell by above is that technologies like rpm have been
> designed on top of quite precise assumptions and used
> approaches on solving some scenarios have been architected within scope of
> those assumptions.
> When now original design design needs to be transformed to handle few new
> assumptions, without breaking scaffold of original design
> everything likely will end up in form of growing and breaking apart ball
> of yeast than something solid.
>
> Providing software in form of only repositories (and effectively breaking
> paradigm of package as file/archive) solves perfectly on
> source side providing software for multiple distro versions of within
> *single repository*. What it means? No longer updating
> repositories addresses on major upgrade -> one less point o fail on whole
> upgrade procedure.
> The same repository is used as well to provide software for multiple
> architectures and packages on repo side are sharing files with the
> same checksums.
> As long as new version of the package A delivers only one changed file in
> new version on new version package everything else on repo
> side will be shared between multiple versions of the packages. Packages
> can be way bigger and as long new versions of the same packages
> will be changeing only some subset of files owned by package over network
> automatically will be transferred only what has been changed.
> Solutions like drpm (delta rpm) are completely not needed because delta
> resources are automatically formed.
>
> If someone is interested some more details about IPS please try to have
> look on source code repo https://java.net/projects/ips/sources/
> pkg-gate/show
> IPS code is probably something like +20 times smaller than rpm, dnf and
> all additional python modules code combined. Aditionally it
> provides all repo side services with caching and providing multi layered
> repos infrastructure services software. IPS is fully written
> in python and in many places still it solves a lot of more
> problems/scenarios which are still ahead of Fedora to solve.
>
> For example on may systems happens something like this that someone
> installs some additional package as JFDI solution. As it was done
> during weekend Monday the same person forgets that temporary solution need
> to be solved in some clean and tested way. After this
> someone else starts using this newly installed software adding to the
> system software some script. This scrip have been even added to
> install profile used in full OS reinstall/DR recovery procedure. However
> after next cycle of reinstallation such script starts failing
> and no one remember why and what is needed.
> How to avoid such scenarios? Easy: by locking whole set of packages after
> initial installation by executing from cron every day
> uninstall every package which is not within originally locked set of
> packages. By this our example script will fail next day after
> installation recalling automatically to finish solving JFDI properly much
> earlier.
>
> Part of the IPS internal simplicity lies as well on top of other OS
> provided technologies like using snapshots. Even single new package
> installation starts from creating on affecter volumes snapshots. If
> package installation fails and it is usually hard to say how to
> roll back all changes on PM layer. So .. no problem. Just roll back
> everything to checkpointed state in matter of fraction of second.
>
> The same approach is possible to use on Linux. However to solve this the
> same way all ext, xfs and few other FSes needs to be excluded
> from new approach and only btrfs ATM could be used as only fully supported
> platform. Radical approach .. but 100% it will be working
> without breaking internal simplicity.
>
> What is more important is that on top of IPS have been already proven that
> this new approach is working. In other words IPS it is stash
> of tested in combat ideas (I'm not suggesting to switch from rpm to IPS
> because ~99.99% Linux community ATM is not mentally ready to
> start thinking about more radical approaches to PM :) )
> IMO it would be really good if people involved in Modularity will have
> closer look on IPS to avoid reinventing the wheel.
> Best would be to switch to IPS but probably this time again it will be not
> possible to avoid NIH syndrome :)
>
> Whole and so huge IPS simplification on code layer was possible only
> because about decade ago few people come to conclusion that it is
> no longer possible to solve new problems using old paradigms of SySV
> packages. rpm still sits very hardly on basic SySV packages ideas
> which as the set they've been invented *~30 years ago* (a lot of people
> here was born around the same time when those fundaments have
> been lied :) ).
>
> As I'm looking one more time now on Modularity I think that those problems
> which this project is trying to solve should be handled
> exactly in the same way because if not .. whole project IMO has high
> chance to fail.
> IMO it is only matter of time when rpm will be abandoned because no longer
> would be possible to stretch this software onto new needs
> without breaking internal consistency.
> rpm still is very strong but already with each day is slightly weaker and
> weaker.
>
> kloczek
> --
> _______________________________________________
> devel mailing list -- devel@lists.fedoraproject.org
> To unsubscribe send an email to devel-le...@lists.fedoraproject.org
>



-- 

Adam Šamalík
---------------------------
Software Engineer
Red Hat
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org

Reply via email to