BTFS – mount any .torrent file or magnet link as directory
github.com
github.com
Or, conversely, what design decisions do you think have hindered adoption?
A feature that might exist, but I haven't discovered, that would make IPFS more appealing to me, would be a way to mount the IPFS like it were an FTP server, and navigate it with whatever file manager you prefer and not have to worry about managing the backend stuff.
That is to say, I'd like BTFS for IPFS.
DNS seems like the best and currently most popular option for letting you have an address with an update-able IPFS link. The nice thing about using DNS is that you can use the same address for people accessing via IPFS and people accessing via standard browsers.
The downside is that hosting an IPFS node is quite heavy on the network. I have a reasonably good connection at home (a bit less than 1MB/s up, a bit more than 10MB/s down) and if I run the IPFS daemon locally I can't really use my internet connection for anything else. I used to rent a little VPS for that, but now I use the free-tier of temporal.cloud and it is sufficient for my usage.
How is it "doubling down", they could exist side by side. Your comment kind-of shows the mentality I've seen with the IPFS project before. The IPFS project has doubled down on it's effort of being more "advanced", "innovative" and "efficient" than BitTorrent, losing what actually makes people like torrents and distributed systems.
Unfortunately right now the IPFS project is totally ignoring that it's effectively nothing and takes nothing to the next level. I think what I mentioned before, is the root cause. Zero ounce of compatibility with the existing BT swarm. It is simply a massive amount of wasted potential to ignore the thousands of terabytes of content the torrent system hosts, the work and services provided and spent for the ecosystem. So much could be done that would strengthen both systems at the same time. Just from the IPFS point of view we could right now have embedded resources from torrents, tens of different clients available that could just be CDNs, existing seedboxes strengthening both swarms and probably much more.
That would be the mix of torrents and web people want, not what IPFS is currently. IPFS is basically reinventing the wheel, but throwing out the round part.
Maybe the IPFS project should channel more work on building next to giants rather than doubling down and throwing away everything BT has to offer?
That said, the core and pretty fundamental limitation with BitTorrent, however, is that the swarms exist "per torrent", which kind of makes a non-starter for a general purpose filesystem?
As such, I don't quite disagree with what you'd like to see done, but that work should go in IPFS... like, trying to extend the way BitTorrent works "up" to something that works for this use case is going to involve a much more fundamental set of low-level changes than even the WebTorrent shift (which is where I'd argue "if only BitTorrent understood the value of working with existing browser-based systems and opening up powerful use cases they would understand that not doing this is like throwing away the round part of a wheel... etc." ;P WebTorrent is the future of BitTorrent as far as I'm concerned, and anything failing to embrace that is already kind of doomed?...) than the other direction, which is really just "go into IPFS and add a little adapter that lets it work with torrent files (at the fundamental loss of efficiency and awkward lack of resource sharing that such usage implies).
> That said, the core and pretty fundamental limitation with BitTorrent, however, is that the swarms exist "per torrent", which kind of makes a non-starter for a general purpose filesystem?
Well, ipfs nodes also tend to pin only certain content. I've seen IPFS links stop working mentioned here on HN even. I see no functional difference in that sense. Content is kept available by those willing to spend resources storing and uploading the specific content.
To address the claimed performance/efficiency problems, IPFS peers could share the same files using IPFS itself, but still also seed them for BT clients.
I totally get though that it wouldn't be super easy to implement, but IMHO the increase in IPFS usefulness, size and resiliency thanks to the integration seems to outweigh the downsides I can see.
Though a while ago I did try sharing the same set of files on two systems by running the two in parallel. It kind-of worked but manually updating the file locations in the torrent client and having an overview became too annoying, it should be built-in. E.g. IPFS sees `x.torrent` and `x`, then assumes `x` is downloadable from BT using that torrent file.
> WebTorrent is the future of BitTorrent as far as I'm concerned, and anything failing to embrace that is already kind of doomed?
In some use-cases, absolutely.
Honestly, if your not already amazed if not at the simplicity of this project, than you should be by the simplicity of fuse filesystems and the capabilities it exposes.
For example, on the local system:
remote-execute gcc localfile.c -o localfile.o
And on the remote system, there is a gcc and a remote agent which receives and retransmits the files
I dont want to mount and expose nfs, or allow a full ssh login. This will be a custom agent/daemon on both ends
For job execution you could write your own agent but doing likely wouldn't be any more secure than SSH. Just make sure you have disabled password logins (use keys instead) and fail2ban or equivalent running to auto blacklist attacks. You could probably use Chef or SaltStack if really wanted to avoid a remote shell but if you're not already running config management then you have to ask yourself if you're over-engineering a solution.
An alternative solution would be to run an OpenVPN tunnel and then you can SSH to your hearts content. But even here, unless you have multiple machines you want to connect to, I can't help thinking you're just making life harder for yourself without getting any realistic gains.
This is all based on the very high level spec provided so I accept there might be some currently undisclosed detail that renders the above suggestions moot.
9front is full of "free carrots". If you want a remote vpn, just import another servers /net ontop of your process namespace and you're all set.
Also, it's not really advertised, but S3 can act as a torrent node: https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.ht...
Question - how do the following "Notes" that Amazon has on it's page affect that?
"Amazon S3 does not support the BitTorrent protocol in AWS Regions launched after May 30, 2016."
"You can only get a torrent file for objects that are less than 5 GBs in size."
I have never used S3's torrent capability, but at this point bittorrent is pretty much "done" -- there's not much to add to make the protocol better without breaking compatibility, which means there's not much support to maintain a working software.
But I'm not sure about it, maybe they don't participate in the DHT or don't use PEX, so that could be something they can improve.
I wrote a device driver for Windows 8 that would mount a .torrent file as a virtual disk way back in 2011. We pitched the intellectual property around to several large companies. The only interest we had in the technology was video game companies... where we could mark file pieces as 'high priority' and allow the player to play the game even when the game disk was partially downloaded.
The IP was sold to a company developing their next-generation console video game system as part of a 24 million dollar package and never saw the light of day. I suspect what they really wanted was the associated patents.
From The BitTorrent Protocol Specification, http://bittorrent.org/beps/bep_0003.html:
> Downloaders generally download pieces in random order, which does a reasonably good job of keeping them from having a strict subset or superset of the pieces of any of their peers.
However clients can certainly choose to download in whatever order they wish. Like Popcorn Time.
If all users downloaded in order, then users downloading the file cannot exchange chunks with other downloaders.
That "exchange" is necessary to encourage users not to limit their upload speeds.
In today's world where the vast majority of users just use the default settings for their torrent client, it probably doesn't matter much.
It can handle videos and other streamable formats if there are enough seeds: the connection is not usually a problem. The pieces are not downloaded strictly sequentially but using a sliding window[1], so if a piece is not immediately available btfs will not waste time and bandwidth waiting for it but just keep downloading other pieces nearby.
The problem is until enough pieces have been assembled, applications reading the file may literally hang: I guess not much software was made with slow I/O in mind.
[1]: https://github.com/johang/btfs/issues/7#issuecomment-1916443...
Video players can gracefully handle streaming media despite spotty connections; is there a reason that they can't pre-read a sliding window of bytes from a file on disk and plow on in case a given range of bytes is taking too long? They could default to wanting all the bytes, but have a setting that instructs it to treat the filesystem as if it were a network source.
AFAIK vlc has that functionality. It allows you to buffer the video n seconds in advance.
Also, very curious, how have you been using btfs? What have you been using it for?
I use it mainly for streaming videos: btfs comes with a small python script "btplay <magnet>" that will mount the torrent and start your player, very handy. Another cool thing you can do is downloading and extracting a file simultaneously, just mount a torrent and call "unzip".
Other experiences with network filesystems (CIFS/NFS) on multiple platforms sometimes have things getting hairy if the connection to the server drops while the filesystem is mounted or in use
A quick glance at https://github.com/johang/btfs/blob/master/src/btfs.cc on line 190 reveals that no seeders would result in an infinite wait state: pthread_cond_wait(&signal_cond, &lock);
The author could mitigate this by automatically failing any reads where there are zero seeders and/or if the peer piece map does not contain the block.
Otherwise, like you're describing, you could add a file and then go to read it a week later and be met with no seeders and thus no file when it could have been grabbed somewhere in between.
But maybe that extends beyond the capabilities of a file system?
They essentially say "download the most recent version signed by this pubkey", which ia notably distinct from hyperdrive's append-only log.
The append-only log is hypercore, one of the building blocks of hyperdrive. Hyperdrive is a layer above and gives you a view of how the archive is at any point in time, with preferential access to the latest version.
TBF what I understood from the request of "mutable torrents" wasn't the literal feature, but a way to have decentralized nodes exchanging updatable content. Bittorent with the Mutable Torrents BEP does work, but it's nowhere near as developed as what hyperdrive is today. And as sad as it may sound I don't think it will ever be.
https://github.com/alibaba/Dragonfly
>At Alibaba, the system transfers 2 billion times and distributes 3.4PB of data every month, it has become one of the most important piece of infrastructure at Alibaba. The reliability is up to 99.9999%.
Unless you mean a different one since you didn’t link source
edit: more constructively, this seems to just use libtorrent in the backend, which supports the 'private' flag https://www.libtorrent.org/features.html . Though even if you didn't, it would still 'work' in the sense of being able to download chunks.
I dont know whether the maintainer is a supporter of crypto (as in tokens) but having a common name with a Tron product (or cryptocoins in general) can backfire.
(I have an alias specifically for finding that out)
Personnally, I don't care about any of the crytpo-mining-coining and I think the two are sufficiently distinct.
However it's good to see that Tron are no longer trying to hide the fact it's a fork. For a long time they didn't provide the source code of their btfs.
johang/btfs first commit: Sun Jul 26 10:20:49 2015 +0200
EDIT: Actually, since this was a fork, it would probably be a pain to hunt down, even with a local checkout. But it usually works.
In the plot of the cartoon the titular character (program) Tron is assumed dead, and then corrupted by a corrupt system. I can only assume this is why his name is being bad mouthed by some sort of crypto-currency scheme, as Tron was a good program, a security program built to defend the users and would never stand silent on for-profit exploitation of users.
In addition they also developed an true international character encoding before Unicode. It wasn't ASCII backwards compatible which is why it wasn't picked by Unicode committee.
A good resource to learn about it is here: http://tronweb.super-nova.co.jp/homepage.html