<p dir="auto"><a href="http://0install.net/" rel="nofollow">Zero Install</a> is a robust cross-platform package manager. It will be able to handle external dependencies on native libraries well and there are already many packages available.</p>
<p dir="auto">It has support for dependency handling, package signing, tooling for maintaining repositories, coexisting package versions, and even graphical tools. It also has optional integration with the system package manager via PackageKit to avoid duplication where possible. I don't think we should try to rebuild this ourselves.</p>
<p dir="auto">In Nightly <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/rust-lang/rust/commit/c89417130f042c58adc60012e7cddc4ef70b70b9/hovercard" href="https://github.com/rust-lang/rust/commit/c89417130f042c58adc60012e7cddc4ef70b70b9"><tt>c894171</tt></a> 2015-01-02, it is apparently not possible to use methods from <code class="notranslate">collections::slice::SliceExt</code> such as <code class="notranslate">to_vec</code> in a scope where <code class="notranslate">use core::prelude::*;</code> (very useful in <code class="notranslate">#![no_std]</code> crates) is also used.</p>
<p dir="auto">Imports can not shadow each other, a name conflict is fatal:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="#![no_std]
#![feature(globs)]

extern crate core;
extern crate collections;

use core::prelude::*;
use collections::slice::SliceExt;

fn foo() {
    ['a', 'b'].slice_to(1).to_vec()
}"><pre class="notranslate"><span class="pl-c1">#!<span class="pl-kos">[</span>no_std<span class="pl-kos">]</span></span>
<span class="pl-c1">#!<span class="pl-kos">[</span>feature<span class="pl-kos">(</span>globs<span class="pl-kos">)</span><span class="pl-kos">]</span></span>

<span class="pl-k">extern</span> <span class="pl-k">crate</span> core<span class="pl-kos">;</span>
<span class="pl-k">extern</span> <span class="pl-k">crate</span> collections<span class="pl-kos">;</span>

<span class="pl-k">use</span> core<span class="pl-kos">::</span>prelude<span class="pl-kos">::</span><span class="pl-c1">*</span><span class="pl-kos">;</span>
<span class="pl-k">use</span> collections<span class="pl-kos">::</span>slice<span class="pl-kos">::</span><span class="pl-v">SliceExt</span><span class="pl-kos">;</span>

<span class="pl-k">fn</span> <span class="pl-en">foo</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-kos">[</span><span class="pl-s">'a'</span><span class="pl-kos">,</span> <span class="pl-s">'b'</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">slice_to</span><span class="pl-kos">(</span><span class="pl-c1">1</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">to_vec</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
<span class="pl-kos">}</span></pre></div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="a.rs:8:5: 8:33 error: a type named `SliceExt` has already been imported in this module
a.rs:8 use collections::slice::SliceExt;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error"><pre class="notranslate"><code class="notranslate">a.rs:8:5: 8:33 error: a type named `SliceExt` has already been imported in this module
a.rs:8 use collections::slice::SliceExt;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
</code></pre></div>
<p dir="auto">Renaming the trait at import doesn’t help, <code class="notranslate">core</code> methods are now duplicated in the scope:</p>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="#![no_std]
#![feature(globs)]

extern crate core;
extern crate collections;

use core::prelude::*;
use collections::slice::SliceExt as CollectionsSliceExt;

fn foo() {
    ['a', 'b'].slice_to(1).to_vec()
}"><pre class="notranslate"><span class="pl-c1">#!<span class="pl-kos">[</span>no_std<span class="pl-kos">]</span></span>
<span class="pl-c1">#!<span class="pl-kos">[</span>feature<span class="pl-kos">(</span>globs<span class="pl-kos">)</span><span class="pl-kos">]</span></span>

<span class="pl-k">extern</span> <span class="pl-k">crate</span> core<span class="pl-kos">;</span>
<span class="pl-k">extern</span> <span class="pl-k">crate</span> collections<span class="pl-kos">;</span>

<span class="pl-k">use</span> core<span class="pl-kos">::</span>prelude<span class="pl-kos">::</span><span class="pl-c1">*</span><span class="pl-kos">;</span>
<span class="pl-k">use</span> collections<span class="pl-kos">::</span>slice<span class="pl-kos">::</span><span class="pl-v">SliceExt</span> <span class="pl-k">as</span> <span class="pl-v">CollectionsSliceExt</span><span class="pl-kos">;</span>

<span class="pl-k">fn</span> <span class="pl-en">foo</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-kos">[</span><span class="pl-s">'a'</span><span class="pl-kos">,</span> <span class="pl-s">'b'</span><span class="pl-kos">]</span><span class="pl-kos">.</span><span class="pl-en">slice_to</span><span class="pl-kos">(</span><span class="pl-c1">1</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">to_vec</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
<span class="pl-kos">}</span></pre></div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="a.rs:11:16: 11:27 error: multiple applicable methods in scope [E0034]
a.rs:11     ['a', 'b'].slice_to(1).to_vec()
                       ^~~~~~~~~~~
a.rs:11:16: 11:27 note: candidate #1 is defined in an impl of the trait `core::slice::SliceExt` for the type `[_]`
a.rs:11     ['a', 'b'].slice_to(1).to_vec()
                       ^~~~~~~~~~~
a.rs:11:16: 11:27 note: candidate #2 is defined in an impl of the trait `collections::slice::SliceExt` for the type `[_]`
a.rs:11     ['a', 'b'].slice_to(1).to_vec()
                       ^~~~~~~~~~~
error: aborting due to previous error"><pre class="notranslate"><code class="notranslate">a.rs:11:16: 11:27 error: multiple applicable methods in scope [E0034]
a.rs:11     ['a', 'b'].slice_to(1).to_vec()
                       ^~~~~~~~~~~
a.rs:11:16: 11:27 note: candidate #1 is defined in an impl of the trait `core::slice::SliceExt` for the type `[_]`
a.rs:11     ['a', 'b'].slice_to(1).to_vec()
                       ^~~~~~~~~~~
a.rs:11:16: 11:27 note: candidate #2 is defined in an impl of the trait `collections::slice::SliceExt` for the type `[_]`
a.rs:11     ['a', 'b'].slice_to(1).to_vec()
                       ^~~~~~~~~~~
error: aborting due to previous error
</code></pre></div>
<p dir="auto">As a work around when upgrading rust-wtf8, I moved <code class="notranslate">use collections::slice::SliceExt;</code> into the block that uses <code class="notranslate">to_vec</code> but does not use other slice methods.</p>