# VFS, Starkits and Starpacks

**URL:** <https://www.ruby-forum.com/t/vfs-starkits-and-starpacks/77208>\
**Category:** Ruby\
**Created:** [November 25, 2006, 2:51am UTC](https://www.ruby-forum.com/t/vfs-starkits-and-starpacks/77208 "2006-11-25T02:51:16Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![oleg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/ebca7d/32.png) [@oleg](https://www.ruby-forum.com/u/oleg)\
**Post date:** [November 25, 2006, 2:51am UTC](https://www.ruby-forum.com/t/vfs-starkits-and-starpacks/77208/1 "2006-11-25T02:51:16Z")

</div>

Hi,

I am new to Ruby. So far, I am really enjoying the language. But, I am  
a bit concerned about packaging applications written in Ruby.

Has there been any thought to implementing something like Tcl’s VFS (see  
[http://wiki.tcl.tk/2138](http://wiki.tcl.tk/2138))?

The VFS support allows for virtualizing the file system calls to more  
naturally program things that are remote (HTTP or FTP) and local (zip  
and tar files). Using this functionality, the Tcl community was able to  
create starkits (originally with zip files and now with metakit  
([Metakit embedded database library](http://equi4.com/metakit.html)) files).

A Starkit ([Starkit deployment technology](http://equi4.com/starkit.html)) creates the illusion of a  
“file system in a file” - on the outside, it’s a single file, yet the  
application code continues to see a complete directory of scripts,  
extensions, packages, images, and whatever other files it needs.  
Starkits can be multi-platform.

After the success of starkits, they were able to wrap up everything into  
a single executable that they call starpacks ([http://wiki.tcl.tk/3663](http://wiki.tcl.tk/3663)).  
This allows for the delivery of an application as a single file that,  
for the most part, does not need to be unpacked to temporary locations  
because the Tcl core has VFS that allows it to look introspectively into  
the executable.

I am not bashing Ruby. I have looked at RubyScript2exe and think it is  
a great start. It would be great if a more robust solution were  
available to allow for clean packaging of Ruby applications.

Thanks,  
Oleg

---

<div class="post-metadata">

**Author:** ![oleg](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/ebca7d/32.png) [@oleg](https://www.ruby-forum.com/u/oleg)\
**Post date:** [November 28, 2006, 11:08pm UTC](https://www.ruby-forum.com/t/vfs-starkits-and-starpacks/77208/2 "2006-11-28T23:08:56Z")

</div>

Oleg Barenboim wrote:

> and tar files). Using this functionality, the Tcl community was able to  
> a single executable that they call starpacks ([Starpack](http://wiki.tcl.tk/3663)).  
> This allows for the delivery of an application as a single file that,  
> for the most part, does not need to be unpacked to temporary locations  
> because the Tcl core has VFS that allows it to look introspectively into  
> the executable.
> 
> I am not bashing Ruby. I have looked at RubyScript2exe and think it is  
> a great start. It would be great if a more robust solution were  
> available to allow for clean packaging of Ruby applications.

Check out Mauricio F.’ file FS based on ruby’s DATA feature:

[http://eigenclass.org/hiki.rb?cmd=view&p=pure+ruby+compiler&key=block](http://eigenclass.org/hiki.rb?cmd=view&p=pure+ruby+compiler&key=block)

If you just want to package a ruby app that doesn’t contain native  
shared objects (just pure ruby libs), you can package it as a single  
ruby script file (which doesn’t get unpacked to temp files at run time)  
using darb:

[http://redshift.sourceforge.net/darb/](http://redshift.sourceforge.net/darb/)

Note that this doesn’t allow you to package other data files, unless you  
wrap them in ruby code (which is not necessarily a bad idea).
