A few years ago, thanks to the Google Summer of Code, I got to meet a brilliant programmer that wrote an entire BitTorrent implementation as a reusable library called bitsharp. Today, I am lucky enough to work with Alan in the team team at Novell.
Alan wrote a Gtk+ UI on top of his library called Monsoon:
With Mono running in the browser as part of Silverlight, I have always felt that we needed to build a UI for bitsharp.
The most important advantage is that every web browser can be turned into a BitTorrent client without having to install extra software.
Some other advantages: you could connect to a web page that contains the BitTorrent client, it would turn your machine into a seeding/downloading host, it could be shut down with minimal fuzz and it would be trivial to spice up the UI and add all kinds of visualizations for the download.
Silverlight 2 now provides direct socket/network access and supports storing files in your local file system. Most of the pieces are already in place to make this happen.
There are a few challenges though. Silverlight does not allow a client to listen on a port, and for security reasons it has a limited set of ports it can connect to.
The first problem could be addressed by having the client initiate connections to third parties requesting and providing data. This might require a protocol extension.
The second problem is easy to solve, but would require other Bittorrent clients to listen in a new port to explicitly grant access to Silverlight clients by exposing a clientaccesspolicy.xml file.
Finally, at least for Moonlight's case, we could start doing some changes to the core and grant the out-of-browser plugin to have full network access.
Posted on 12 Nov 2009