> How will it handle external dependencies?
I don't think it should. External dependencies are way too complex.
They come in different flavors on different systems. On Windows, for
example, you don't have a package manager, and you'll have to ship
these dependencies with the program using an installer. On each Linux
distro there is custom package manager, each having its own strategy
of naming things and its own versioning policy. It is impossible to
unify them, and I don't think that Rust package manager should attempt
to do this.

> I don't understand this. A package manager specific to Rust is
> additional software, just like 0install. 0install has full support for
> installing dependencies via the system package manager on many systems
> if desired.
*End users* won't need Rust package manager at all (unless they want
to install development versions of Rust software). Only package
maintainers and developers have to use it. End users just use their
native package manager to obtain packages created by maintainers. If
Rust would depend on zero install, however, end user will be *forced*
to use zero install.

I'm against of using zero install for the following reasons. First, it
is just a packaging system. It is not supposed to help in building
Rust software. But resolving build dependencies and invoking the
compiler with correct paths to installed dependencies is crucial. How,
for example, zero install would handle dependency to master branch of
some source repository? What if I'm developing several packages which
depend on different versions of the same package? Zero install allows
installing multiple versions of the same package, yes, but how should
I specify where these libraries are located to the compiler? How
should I specify build dependencies for people who want to hack on my
package? Majority of direct dependencies will be from the Rust world,
and dedicated building/packaging tool would be able to download and
build them automatically as a part of build process, and only external
dependencies would have to be installed manually. With zero install
you will have to install everything, including Rust-world
dependencies, by yourself.

Second, it is another package manager which is foreign to the system
(unless the system uses zero install as its package manager, but I
think only very minor Linux distros have that). Not only this is bad
because having multiple distribution systems is confusing for the end
users (BTW, as far as I can see, both Linux and Windows users don't
want it. Linux users wouldn't want to have additional package manager,
and majority of Windows users just don't know what package manager is
and why they have to install some program which downloads other
programs just in order for them to use this small utility. They are
used to one-click self-contained installers. On Android you are forced
to have self-contained packages, and zero install won't work there at
all. Don't know anything about Mac, haven't used it). It also means
additional impact on distribution maintainers. If Rust adopts zero
install universally, then, because distribution maintainers won't
support any build system but their own, they will have either to
abandon Rust software at all or build and resolve their dependencies
(including Rust ones) manually, as it is done with C/C++ now. They
won't be able to use zero install because they simply can't depend on
it. I think this will hurt Rust adoption a lot.

Zero install may have integration with package systems, but looks like
it is very brittle. According to [this
page](http://0install.net/distribution-integration.html) it is package
owner's duty to specify how native package dependencies should be
resolved in each distribution. This is extremely fragile. I don't use
Debian, for example, how would I know how my dependency is called
there? When package owners won't write these mappings for every
distribution, then this integration immediately becomes completely
pointless. Also I'm not sure that zero install can integrate with
every package manager it supports without additional tools, which
means even more unneeded dependencies.

Zero install package base is also very small. Distributions usually
provide a lot more packages. Then, if zero install is the only way
Rust software is packaged, I just won't be able to use these libraries
unless someone, possibly myself, writes a zero install package
definition for it. And this is extremely bad - I don't want to resolve
transitive dependencies for my external dependencies, this is already
done by my distribution maintainers.

Having custom flexible build and packaging system which is used by
developers and maintainers is a separation of concerns with very clean
interfaces between software developers and software users. I believe
that it should be created in order for Rust to be adopted at large,
and rustpkg provides solid base for it.
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to