Search Publish Home What is LittleShoot? Help Using LittleShoot LittleShoot Technology Contact LittleShoot About LittleShoot Download
LittleShoot is:
  • Easy File Sharing in your Browser
  • Streaming P2P Downloads
  • Searches of YouTube, BitTorrent, LimeWire, Flickr, and More
  • BitTorrent Downloads in your Browser
  • Open Source
To get started, download and install LittleShoot using the button below.

DOWNLOAD LITTLESHOOT
Technology
While we strive to make LittleShoot as simple as possible for the user, the technology working behind the scenes is anything but. Technology lies at the heart of what we do.

LittleShoot is not just a new p2p program. Rather, LittleShoot is built on a new p2p platform based on open standards. There are several core pieces of functionality every p2p file sharing system needs:
  1. A signaling protocol - a way to send a message from any computer to any computer
  2. An offer/answer protocol - a way for two computers to communicate about what their capabilities are once they've successfully signaled each other
  3. NAT and firewall traversal - A way to seamlessly negotiate connections between hosts in heterogeneous network environments
  4. Publishing - A way to publish content to other peers
  5. Searching - A way to search the network
  6. Downloading - A way to download content from other peers
In most p2p networks, all of the above functionality - and that's a lot of functionality - is lumped together into one big heap, one giant "protocol." From a protocol design perspective, this spells disaster. As anyone with experience in technology knows, modularity is a cornerstone of writing robust systems.

At LittleShoot, we address each component of p2p individually. While we're not wed to any single protocol for any single piece of functionality, we do believe strongly that open protocols are crucial to furthering the liberating potential of the Internet and that interoperability is a vital part of what makes the Internet so powerful. LittleShoot uses the following:
  1. Signaling protocol: Session Initiation Protocol (SIP)
  2. Offer/Answer Protocol: Session Description Protocol (SDP)
  3. NAT and Firewall Traversal Protocol: Interactive Connectivity Establishment (ICE), which uses Simple Traversal Utilities for NAT (STUN) and Traversal Using Relay NAT (TURN)
  4. Publishing: We use a simple REST protocol to publish everything to our central servers.
  5. Searching: Again a simple REST protocol for initiating searches on our central servers, and JSON for responses.
  6. Downloading: Hypertext Transfer Protocol (HTTP) with a segment-scheduling layer on top that does multi-source downloading.
Layering protocols in this way yields many benefits. Each component has the bare minimal dependencies on other components, allowing each to evolve independently. A new version of SIP would not break the other protocols, for example, nor would a new version of HTTP.

Let's take a closer look at downloading as an example of this modularity. Anyone could take just our downloader and easily use it in his or her program without using any of the other code - multi-source downloading for free. The downloader will use whatever URL resolution scheme you give it. It's built on HTTP, but it could easily be adapted for other protocols. The algorithm for downloading is also easily replaced. You could switch it to use a BitTorrent-style rarest-segment-first algorithm, for example, or a windowed-rarest-segment-first system for BitTorrent-esque streaming. Perhaps more interestingly, you could also swap in the latest research on efficient swarming coming out of the university community. If the downloader happens to be running with our stack, you get all of the added benefits of built-in NAT traversal and efficient signaling, but the downloader never knows the difference. The signaling layer and the NAT traversal layer could switch to completely different protocols without affecting the downloader at all.

You'll find examples like this throughout our code. Wherever possible, functionality is parceled out into discrete projects, each designed to be an independent open source project in its own right. The reliable UDP layer is another example. Our downloader often uses it without knowing, but the reliable UDP layer itself is completely independent and has its own jar and simple API for easy inclusion in any other project.


Why Are Open Protocols So Important?

We believe open protocols are a crucial part of making the Internet a democratizing force. Open protocols level the playing field, inviting all comers to participate and to build upon them however they wish. This was one of the fundamental reasons for the success of the web. All of a sudden HTTP and HTML became the de facto standards. They were relatively easy to implement, lowering the barrier to entry enough to spark the flurry of innovation we see today as the Internet. At LittleShoot, we think the same thing can happen for a new generation of protocols that bring a new layer of rich functionality to everyday applications.

Open protocols also work spectacularly well when combined with open source, allowing open source projects to focus on implementing one discrete problem well rather than tackling something more complex. Again, small pieces and modularity are cornerstones of robust systems.

Using a standards-based approach also lowers barriers for people wanting to interoperate. Anyone wishing to join our network could throw together his or her choice of open source implementations and start right up. If that newcomer wants more information, the documentation is meticulously recorded in RFCs and drafts describing exactly how everything is done -- the protocols are already open.


Accessing the Code

You might be wondering how you get your hands on the code. We're working on a site with more details on participating and on accessing each module, but for now you can check everything out from our SVN repository and run the code with maven. Here are the steps you need to follow to run the program:
  1. $ svn co http://svn.littleshoot.org/svn/littleshoot/trunk littleshoot/trunk
  2. $ cd littleshoot/trunk
  3. $ ./build.bash or ./build.ps1 (Windows)
  4. $ ./run.bash
This will start the LittleShoot process running in the background. You can then simply point your browser to the LittleShoot start page, and the site will automatically recognize you've got LittleShoot installed.

For help setting up maven or subversion, please refer to their respective sites. We'll soon put much more documentation up allowing you to participate as you desire. If you'd like to contribute to the documentation of LittleShoot and have a knack for maven site building, feel free to pipe up on our forums or to start playing around with a checked-out version of the code.
Get Updates:


follow littleshoot at http://twitter.com
Search | Downloads | Publish | About
 
Scanning for LittleShoot...
Loading LittleShoot P2P 2.0 File Sharing in the Browser