[erlang-questions] Code Archives (Turning rebar into a package manager)

Tim Watson <>
Wed Oct 31 14:09:48 CET 2012


I think you'll find that constraint is enforced by the operating system, rather than the erlang runtime. If operating systems allowed you to dynamically load a library from a process address space, that would open up a massive security hole.

On 31 Oct 2012, at 12:59, Ola Andersson A wrote:

> Hi,
> 
> I've been experimenting a little with escripts including code archives for test purposes.
> It's a really useful feature that seems to work nicely at least this far.
> 
> The only stumbling block I have seen is when an application included in the archive uses C drivers.
> When the path (code:priv_dir(App)) provided to e.g. erl_ddll points into a code archive it will result in an error.
> 
> I fixed it with a hack that extracted the driver to a temp directory and patched the app to read the driver from the temp directory and then remove it.
> Not something I would use in production code. 
> 
> Are there any plans to add the possibility to load a driver directly from an archive?
> 
> BR
> /OLA.
> 
>> -----Original Message-----
>> From:  
>> [mailto:] On Behalf Of Joe 
>> Armstrong
>> Sent: den 30 oktober 2012 18:34
>> To: Andrew Berman
>> Cc: Erlang
>> Subject: Re: [erlang-questions] Turning rebar into a package manager
>> 
>> On Tue, Oct 30, 2012 at 6:31 PM, Joe Armstrong 
>> <> wrote:
>>> On Tue, Oct 30, 2012 at 6:17 PM, Andrew Berman 
>> <> wrote:
>>>> I come from the Java world and I'm sorta blown away that Erlang 
>>>> doesn't have something comparable to JAR files, which work 
>> just fine.
>>> 
>>> Well it does actually - but this is not stunning well documented.
>>> 
>>> In the manual page for code there is a section entited
>>> 
>>> LOADING OF CODE FROM ARCHIVE FILES
>> 
>> My mail got sent before I'd completed it ...
>> 
>> programs like rebar use these features
>> 
>> /Joe
>> 
>> 
>>> 
>>> 
>>>> Everyone needs to
>>>> agree on a standard for which to package the applications. 
>> JARs are 
>>>> just zips of class files with config files, so why not start there 
>>>> and just have a zip file with the BEAMs and priv directory with 
>>>> configs.  Then we need erl to be able to read these zip 
>> files and use 
>>>> them as libraries without having to unzip them.  I think 
>> we need to 
>>>> just start simple and then evolve over time if we need to.
>>>> 
>>>> --Andrew
>>>> 
>>>> On Tue, Oct 30, 2012 at 4:08 AM, Tim Watson 
>>>> <>
>>>> wrote:
>>>>> 
>>>>> 
>>>>> On 30 Oct 2012, at 09:41, Ignas Vyšniauskas wrote:
>>>>> 
>>>>>> On 10/23/2012 09:46 AM, Joe Armstrong wrote:
>>>>>>> The above link has an example command
>>>>>>> 
>>>>>>>>> git fetch-pack --include-tag -v 
>>>>>>>>> :hyperthunk/gitfoo.git
>>>>>> refs/tags/lager-0.9.4
>>>>>> 
>>>>>> Wouldn't --depth=1 make it even better? Do we need all of the 
>>>>>> history here?
>>>>>> 
>>>>> 
>>>>> Indeed we do not, though I've not tried that. Someone 
>> also mentioned 
>>>>> to me offline (a while ago) that they were concerned 
>> about using git 
>>>>> as a backend rather than adopting something that is not only 
>>>>> distributed but actually has mirrors in place, e.g., apt/yum or 
>>>>> whatever.  Stashing things using git simply seemed like a 
>> *free* way 
>>>>> to get started when I was first looking at it.
>>>>> 
>>>>> So, I'm fairly sure we're not going to figure out a way 
>> to do this 
>>>>> that pleases everybody. And *even* if the package management and 
>>>>> distribution problem was neatly solved, there would be 
>> cases where 
>>>>> you might actually
>>>>> *want* source code dependencies instead. Another reason 
>> we looked at 
>>>>> git was because once you've built everything, if you're resolving 
>>>>> dependencies from a central location (like $HOME/repo or 
>> whatever) 
>>>>> then you've got to deploy them as a snapshot each time 
>> they're built 
>>>>> and so on. This stuff actually gets quite involved - using say 
>>>>> maven, which is actually very good at managing this, it can still 
>>>>> make the development process over complicated at times.
>>>>> 
>>>>> Take an example project: RabbitMQ. You're building 
>> multiple projects 
>>>>> that depend on each other, and the bug you're fixing 
>> involves making 
>>>>> changes to three different components, each of which 
>> lives in its own repository.
>>>>> How're you going to figure out which projects need to be built if 
>>>>> they're all completely discrete by the time they go into the 
>>>>> repository? Of course its easy to solve dependencies with 
>> make and 
>>>>> rebar will compile *including* dependencies by default, 
>> which goes a 
>>>>> long way to making this situation workable in practise.
>>>>> 
>>>>> Of course what Joe is really talking about is the ability 
>> to install 
>>>>> *other people's work* for which you have absolutely no (or maybe 
>>>>> just very
>>>>> little) interest in the source code. I typically don't care how a 
>>>>> particular bit of cowboy or webmachine or whatever work, 
>> as long as 
>>>>> it does I just ignore it.
>>>>> 
>>>>> And this problem cannot be *that hard* to solve, because you know 
>>>>> what - stuff like rubygems/bundler is really damn useful, as it 
>>>>> PyPI. I'm sure the node thing is great, though I've never looked. 
>>>>> Even OCaml Godi comes in useful and despite the vitriol I 
>> hear about it, cabal+hackage is invaluable.
>>>>> Point is, these things make it easy to get stuff done, 
>> thought they 
>>>>> have gaps, flaws and whatnot - they still add a lot of value.
>>>>> 
>>>>> Oh and BTW if someone does come up with a system to do 
>> this, then it
>>>>> *should* just be packaged as a rebar plugin, as there's 
>> no need to 
>>>>> change rebar at all in order to override things like these.
>>>>> 
>>>>> Cheers,
>>>>> Tim
>>>>> 
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> erlang-questions mailing list
>>>>> 
>>>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> erlang-questions mailing list
>>>> 
>>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>> 
>> _______________________________________________
>> erlang-questions mailing list
>> 
>> http://erlang.org/mailman/listinfo/erlang-questions
>> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 235 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20121031/b12c72bb/attachment.bin>


More information about the erlang-questions mailing list