The new Freenet has been up and running since December along with some early applications like River[1], our decentralized group chat and Delta - a decentralized CMS. Users have already started to build their own apps on Freenet including games, and we have some interesting apps in development like Atlas, a search/recommendation engine.
Architecturally, this new Freenet is a global, decentralized key-value store where keys are webassembly contracts which define what values (aka "state") are valid for that key, how or when the values can be mutated, and how the state can be efficiently synchronized between peers.
We've developed a unique (AFAIK) solution to the consistency problem, every contract must define a "merge" operation for the contract's associated state. This operation must be commutative, meaning that you can merge multiple states in any order and you'll get the same end result.
This approach allows state updates to spread through the network like a virus[2], which typically achieves consistent global state in a few seconds or less.
Like the world wide web, Freenet applications can be downloaded from the network itself and run in a web browser - similar to single-page apps on the normal web. However, rather than connecting back to an API running in a datacenter, the webapp connects locally to the Freenet peer and interacts with Freenet contracts and delegates over a local websocket connection.
If you'd like to try Freenet we have convenient installers for the major desktop OSs but not yet mobile, and you can be chatting with other users on River within seconds[3]. Happy to answer any questions, you're also welcome to read our FAQ[4], or watch a talk I gave back in March[5].
[1] https://github.com/freenet/river
[2] https://freenet.org/about/news/summary-delta-sync/
> We've developed a unique (AFAIK) solution to the consistency problem, every contract must define a "merge" operation for the contract's associated state. This operation must be commutative, meaning that you can merge multiple states in any order and you'll get the same end result.
Where can I learn more about this? How is this different from CRDTs/CmRDTs?
and when played out of order, it's guaranteed to resolve to foobaz eventually or immediately, depending on when messages are received
when you encounter the scenario of a fork, there's usually a fork resolution rule, e.g. D: { "prev_hash": "<hash of B>", "content": "foobazbar" }
to resolve C vs D, sort lexicographically, choose direction of sort order and pick first
When you have non-continuous data due to messages dropping, e.g. you have B and perhaps an E that builds on C, you can either use the same lexicographic rule, or make the hash basis a combination of timestamp and hash, so you get temporality and lineage.
As for deletes, you have either the single set approach of simply making the message content empty and that _is_ the delete, or you have the 2-phase sets, where there exists an add set and a delete set.
Quite a few ways to approach it, but commutativity can be readily preserved.
but "makes sense" and ways to optimize that can change massively with context. e.g. for a chat app, as soon as you see "deleted message X", you can reasonably drop X and all past and future changes to X because they won't be shown by anyone (don't even need to sync them). if you do that with "deleted chars 87..93" in a text editor, past-edits that you receive in the future might affect the behavior (it might add chars before those, changing what that range means), so you can't simply forget those chars (e.g. an easy option is to replay all events that occur after an event syncs, but that means retaining all events forever). the semantics you choose and what you do with the data affect your outcomes a lot.
tbh this is one of the reasons I like the idea of a WASM-defined algorithm. no one algorithm will be "best" for all data, and the storage/computation/transmission savings can be extreme.
So there is no one approach to this, rather you design the approach based on the application, and since contracts are just webassembly they are extremely flexible.
Thank you!
> Where can I learn more about this?
If you don't mind watching a video I gave this talk back in March that should be fairly comprehensive: https://youtu.be/3SxNBz1VTE0?si=R4ifrsfEUJfvjDPx
If you would prefer an article I recommend: https://freenet.org/about/news/summary-delta-sync/
> How is this different from CRDTs/CmRDTs?
It's very closely related, you can view Freenet contract state as a CmRDT, where the details of the merge operation are specified in the webassembly contract.
They describe it as a commutative monoid, which means it has associativity and commutativity. CvRDTs also need idempotence, so they can handle duplicate data. Either they are idempotent too (which would make it semilattice-like), or the network protocol handles the deduplication outside of the data itself.
Letting the payload/application define the merge operation is clever. I assume it would mean contracts could opt in to idempotency if it doesn't already exist.
The other bit Freenet has added is doing all this with DHT routing and subscriptions, rather than a more basic peer mesh. This is very different to a blockchain and means it probably isn't suited for anything transactional.
> CvRDTs also need idempotence, so they can handle duplicate data. Either they are idempotent too (which would make it semilattice-like), or the network protocol handles the deduplication outside of the data itself.
Freenet's summary/delta synchronization mechanism implicitly disregards duplicate updates. The idea is that a peer A creates a "summary" of a contract's state which is sent to the other peer B which then creates a "delta", which contains anything in B's state that isn't in A's state. The delta is then sent from B to A bringing A's state up-to-date. Thus the contract defines a custom synchronization mechanism for its state which can be very efficient.
These summaries and deltas are just arbitrary bytes as far as the framework is concerned, their meaning is entirely up to the contract.
> The other bit Freenet has added is doing all this with DHT routing and subscriptions, rather than a more basic peer mesh. This is very different to a blockchain and means it probably isn't suited for anything transactional.
That's correct, Freenet doesn't guarantee a global consensus although in practice contract states will converge within a few seconds. This is good enough for applications like group chat and social networks but for a cryptocurrency you still need to solve the double-spend and global ordering problems.
(the main thing I've been wanting to try: rather than graphql, send a WASM blob along with your request to a server, and just run it to filter fields in the response / pipeline requests / define "fail if any err / pair errors with requests" for concurrent requests. arguably you could even have it control callee-internal retries.)
The issue was that Freenet requires that intermediate peers can cache the contract state as they're passing it back to the requestor so in the end I decided against it, but might revisit in the future.
but for e.g. mobile apps with a trusted backend? probably great. you could even just send hashes of the WASM blobs because they will often be identical (and the full blob if that fails), and some serialized data to serve as args that vary (e.g. page-size limit of the third internal request), and you'd have an absurdly flexible system with fairly small requests. I'm just not sure how small, or if it'd end up computationally worth it compared to graphql / sparql / etc.
A cryptocurrency-based solution like you suggest will undoubtedly be one of a menu of reputation bootstrapping options that will develop over time.
Don't get me wrong, this is awesome. I think it is built on a subtlety bad premise. I think it is time to start build organizational nomic games on this sort of contract system, literal organization governance, for systems like this to thrive.
And sure, they can be, if they adopt patterns that allow it. I can also find plenty of counter-examples. I don't think "humans are less vulnerable to sybil attacks than automated systems" is a weakly-defensible stance at all.
> Reputation systems have been a theoretical idea for a while, but we haven't come up with anything sybil-proof without centralized identity management.
I don't think it's accurate to say that we haven't come up with anything. The original Freenet has had a decentralized web-of-trust plugin for over 20 years[0].
It's far from perfect, in practice it seems to have empowered a small number of people with disproportionate influence - but that's due to solvable design issues, it's not a sybil problem.
It's also important to distinguish between sybil-proof and "raising the cost of sybil attacks to the point that they're manageable".
I do agree with your broader point that there is massive scope for building truly decentralized governance systems on Freenet. I've done some thinking about it but it's still very speculative[1].
[0] https://github.com/hyphanet/plugin-WebOfTrust
[1] https://freenet.org/about/news/799-proof-of-trust-a-wealth-u...
Think of it as going back to the Internet's decentralized roots.
For example, if Freenet were to reach scale, it could eventually need some kind of economic primitive around it. Something similar to how Filecoin handles decentralized storage, but for app state. One way to do this could be paying peers to keep app state available, serve it reliably, etc. and prove they are doing so.
So there are a lot of possibilities but for now users are motivated by a desire to see the network succeed, and that seems to be a sufficient motivator at our current scale.
Freenet's approach works well for things like group chat, where temporary inconsistency is mostly just an irritation, but for a cryptocurrency it is fatal.
I'm not saying you couldn't build a cryptocurrency on Freenet, but you'd still need a solution to that problem.
Currently it appears centralized, but in principle it'd be pretty easy to shift it to a web of trust instead, and hosts can choose what they allow and how much they value it.
(zero-knowledge proofs seem probably rather important to adopt tho, as right now it'll tie you to a stable pseudonym)
- You participate in a secret cabal, and don't want participants' identities be visible to each other.
- You're a journalist, and want to give your informants in sensitive matters, or from oppressed countries, a way to securely interact with you, so that you won't be technically capable of reporting their identities.
- You're selling illegal goods or services.
I'd say that in the first two cases I would consider running a separate copy of the network, because it apparently involves one supernode, and I might want to control the supernode (or maybe not).
It was amazing and led me to get far more acquainted with the cyberpunk scene. It was this alternative separate internet from what the rest of the world saw with all of the good and bad that brought.
I've been meaning to set it up again and get back into it. I will say for everyone pining for the Internet of yesteryear freenet is it. Go and explore it it is everything the 90's Internet was like, super slow, crazy unhinged nerds all over the place random collections of links, crazy.
Thanks for all you've done Ian
Edit: Btw what is the best way to support the project and get involved?
If you're in a position to support the project financially you're more than welcome to donate[1], we're a 501c3 non-profit and all funds go to support development.
If you're a developer and are interested in building on Freenet I suggest starting with https://freenet.org/build/manual/tutorial/, you can also join our Matrix room[2], or install Freenet[3] and chat with us on River[3], our decentralized group chat.
[1] https://freenet.org/donate/
I wonder though, what is your idea of a future, where freenet plays an important role in most peoples lives?
Great work it seems, so far. I will yet have to really look through it all. Congratulations on this.
> I wonder though, what is your idea of a future, where freenet plays an important role in most peoples lives?
While I realize this is wildly ambitious, my goal is that Freenet could ultimately replace the world wide web and the client-server architecture more generally which I view as inherently concentrating power in the hands of a few (which it has done).
in favor of a rewrite from different developers, without asking anyone on the original team.
It was an ivory tower decision which was announced on the mailing list without prior discussion.
The old team did not agree, yet it was forced through by a decision of the "board".
The "board" was a group of people which had not been active on the project for over a decade.
https://www.mail-archive.com/devl@freenetproject.org/msg5526...
The funding of the existing, original "Freenet" was repurposed for the new one of course.
The new "Freenet" does not have anonymity as a design goal anymore,
while the old one continues to exist and is maintained under its new name "Hyphanet" at:
And even without agreeing on whether people should be anonymous on the Internet,
it could be agreed that replacing a software which guards against a certain threat model (repressions) with one which does not,
without changing the name, is not exactly a wise decision.
We will also have a decentralized reputation system that will protect people from being exposed to unsavory or illegal content, a common criticism of the old Freenet architecture.
I know you designed the thing, and that was a great effort, but what a miss when compared to the vast majority of freenet users priorities.
Similarly, reputation systems aren't inherently coercive, they're more analogous to spam filtering or trust heuristics, mechanisms for deciding what to prioritize - but ultimate control always remains with the user.
I’m not a fan of “think of the children“ arguments but the Internet cannot actually be a complete free for all and “freedom of speech” is not some magic shield that overrides all other ethical considerations. CSAM is not a particularly high bar and frankly if you want people to throw in with you then you can’t brush it off so lightly.
Yet you're making one.
> the Internet cannot actually be a complete free for all
Yet in many important ways, it is.
As much as publishers would like to shut down Scihub, it exists. The Pirate Bay famously persists. Nation states with entirely opposed legal systems connect and interoperate to at least some degree.
This is a false narrative, from the Freenet FAQ[1]:
Why was Freenet rearchitected and rebranded?
In 2019, Ian began developing a successor to the original Freenet, internally named “Locutus.” This redesign was a ground-up reimagining, incorporating lessons learned from the original Freenet and addressing modern challenges. The original Freenet, although groundbreaking, was built for an earlier era.
This isn’t the first time Freenet has undergone significant changes. Around 2005, we transitioned from version 0.5 to 0.7, which was a complete rewrite introducing “friend-to-friend” networking.
In March 2023, the original Freenet (developed from 2005 onwards) was spun off into an independent project called “Hyphanet” under its existing maintainers. Concurrently, “Locutus” was rebranded as “Freenet,” also known as “Freenet 2023,” to signal this new direction and focus. The rearchitected Freenet is faster, more flexible, and better equipped to offer a robust, decentralized alternative to the increasingly centralized web.
To ease the transition the old freenetproject.org domain was redirected to hyphanet’s website, while the recently acquired freenet.org domain was used for the new architecture.
It is important to note that the maintainers of the original Freenet did not agree with the decision to rearchitect and rebrand. However, as the architect of the Freenet Project, and after over a year of debate, Ian felt this was the necessary path forward to ensure the project’s continued relevance and success in a world far different than when he designed the previous architecture.
> The new "Freenet" does not have anonymity as a design goal anymore,
Because the new Freenet will have a menu of anonymity options rather than committing to a one-size-fits-all approach, while also addressing the issue of illegal content[2].
[1] https://freenet.org/about/faq/#why-was-freenet-rearchitected...
[2] https://freenet.org/about/faq/#how-does-freenet-handle-harmf...
There was no "year of debate".
You came to the mailing list and announced it for the first time as a finalized decision already,
without any prior debate with the original team.
The "board" you cited as the body which allegedly discussed it did neither join the mailing list discussion,
nor were you willing to hand out their contact info.
It's all public for anyone to see on the mailing list archive:
https://www.mail-archive.com/devl@freenetproject.org/msg5526...
- https://www.mail-archive.com/devl@freenetproject.org/msg5534...
- https://www.mail-archive.com/devl@freenetproject.org/msg5534...
Gee, I can't imagine how that mailing list could ever be toxic.
Some of the things you say in these threads might be "right" but I can assure you that many of them are not effective, which is counterproductive to the goal you are trying to achieve.
A culture where people are expected to constantly self-censor to avoid bad-faith interpretations is unhealthy and corrosive.
Just because you have a belief about something doesn't make it right to always assume the worst from people and that you always have the best answer.
I tend to avoid people that don't come from a place of good faith. And I feel that attacking people because you might be right about something is coming from a place of bad faith and isn't always the best course of action. There is a place for that, when it comes to your freedom being violated or something, but when it comes to having discussions with people, we are all human. Ego can be a determinant.
Again, as we are wondering into tumblr style debates here (ie not listening and just saying what you think they said)
There is a difference between being "right" and being "effective"
Or to put it another way: "perfect is the enemy of good"
However I will break it down a bit more. You agree with me that there is such thing as a horizon of "acceptable opinion" for people? Some have larger windows, some much narrower.
If we agree on that, I would ask, what happens if someone goes in hard (rhetorically) with a viewpoint that is outside of "acceptable opinion"? You begin to discount their opinion, regardless of evidence. Or it requires a much high bar to accept _any_ opinion from that person.
Which leads back to the original point, you may be correct, but you are unable to persuade anyone else that you are correct, because you are not speaking the same language and gently pulling them to your viewpoint.
Hence the "you can be right, or you can be effective"
This is grim.
If you stand by it I'd say good.... luck, yeah, good luck, you're singlehandedly the gravest enemy of the project.
If you think a specific statement was wrong, harmful, or dishonest, then explain why. I'll wait.
That is what is wrong with it.
> I stand by every word I said in that thread
A warning sign.
Look, if everyone around tells you says it sounds like a donkey, looks like a donkey and walks like a donkey, maybe check with a vet?
It's not a conspiracy and not that hard. You'd be embarrassed if you u saw what we see. And indeed, you destroyed the credibility of the project with that.
"The woke mind virus" really? You used that non-ironically? This is not something a serious or sane person would say for real.
Why do you get to bypass the HN global rate limit?
I think it’s a category error and an ad hominem attack to bring it up in a debate with someone. It doesn’t mean your wrong or can’t still beleive they were virtue signaling, if that’s what you mean by standing by what you said, but more than one thing can be true and that being your reaction is not honest engagement with the criticism… I don’t care think it’s about the joke very much, it’s not especially funny but not all humor has to be, and I don’t love their reaction to it either, but I think you’re confusing the feedback you’re getting here and there and probably elsewhere that your opinions should change… a sibling comment spoke of being right vs effective, and there’s something to that, but there’s also being right vs having a growth mindset, about being open to genuine conflict that sometimes brings new perspective or insight… But that doesn’t happen when one side shuts down the other with ad hominem attacks or uncharitable assumptions. To be fair, it doesn’t happen online in mailing lists or discussion forums at all very often. Maybe you only get these kinds of reactions here and when people seem more real to you in person you engage differently… I know most people engage differently online than in person, and different pseudonymously than using real names. Someone else here compared you to Linus, and there’s probably something there? There’s no doubt you brought some vision and insight to both these projects, as he did, but something changed for him some years back that was a growth moment and caused him new perspective on how he engaged with people online. The same could still happen for you, and it wouldn’t mean you were giving in to a “woke mind virus”, it would mean you were growing.
I was in the midst of obviously baseless allegations being made against me, not because of anything I actually said but because some very nasty[1] people disagreed with a naming decision I had made.
If you ever find yourself in that situation you are way past the principle of charity.
I'm not saying I couldn't have handled it more gracefully and probably would today, remember this was an obscure mailing list post from 3 years ago that someone dug up.
[1] This is not to suggest that everyone who disagreed with my decision behaved badly, it was a small minority
Edit: do they all like the letter X, too? I think in this list it's just a coincidence, but maybe?
Edit because I can't post a new comment: https://news.ycombinator.com/item?id=46608061
Identitarianism is a cancer, that has been fed via social media algorithms. We seem to have invented a machine for rewarding all of the wrong incentives. Who would have thought that phenomena like audience capture & polarised thought bubbles would be in the palm of the hand, directing thoughts and forming unbreakable opinions on an array of issues that otherwise wouldn't even be on the radar?
I don't think that this is a left, right or in between thing. Identitarianism had infected the entire political spectrum.
BTW: Perhaps I'm wrong but I don't take the Wikipedia definition of "identitarian movement" and identitarianism. I'm thinking entirely about identity politics. "If you're associated with person X you must be Y", or "If you believe A you must be a B". Highly policed thought bubbles. Ostracism. Cancelling.
As a result, today, with technology that can enable mass communication of thought, there are important conversations that can no longer happen in society.
And that repurposing the name would cause lots of damage.
I'm sorry, but nothing following that even comes close to proving that it's a false narrative. Quite the opposite actually.
> To ease the transition the old freenetproject.org domain was redirected to hyphanet’s website, while the recently acquired freenet.org domain was used for the new architecture.
So in that aspect it seems more user friendly than a hard fork.
This isn't even the first time we did a ground-up redesign/rewrite of the Freenet codebase, we did this in 2008 with the 0.7 release.
Number of contributors or pull requests isn't a good metric at the moment since the advent of Claude Code et al. has seen a dramatic uptick in both everywhere.
He has forked the project (to something that does not share the same goals so "fork" is arguable here), took the name, the cash and the goodwill.
We went from "we have enough donations/donators" to "how do we pay for the upcoming AWS bill?".
As someone who has been fairly active on the "old freenet", I have never cared about money nor funding... but I cannot help but notice that some has likely been misappropriated. Things like the SUMA award (https://web.archive.org/web/20150320201527/http://suma-award...) were awarded specifically for "protection against surveillance and censorship" that the "new freenet" does not even aim to provide.
"The board" of the non-profit seems to have been culled just before the decision. I don't know why, I wasn't on it. Maybe @agl can shime in (he was).
All I know is that this could have been handled better. It's what I wrote back then on https://www.mail-archive.com/devl@freenetproject.org/msg5527...
It was slower than Kazaa/bittorrent, but it was far harder to work out who was shareing what. (if memory serves it also chunked files up so they weren;t on the same machine, but that could be me misremembering)
It would surprise me if this would not be a common interpretation of these texts alone among the readers here.
As for the general reputation of the OG Freenet in this lineage, to the extent I'm aware, anonymity was pretty much the defining characteristic. More or less everything else in the user experience suffered to some extent compared to other chat and file sharing services because of this "focus".
Please explain how "the new freenet" tackles censorship resistance.
https://web.archive.org/web/20001017133926/http://freenetpro... "Freenet is a peer-to-peer network designed to allow the distribution of information over the Internet in an efficient manner, without fear of censorship."
https://web.archive.org/web/20050201110519/http://freenetpro... "Freenet is free software which lets you publish and obtain information on the Internet without fear of censorship."
https://web.archive.org/web/20150206152355/https://freenetpr... "Share files, chat on forums, browse and publish, anonymously and without fear of blocking or censorship!"
today: "Hyphanet is peer-to-peer network for censorship-resistant and privacy-respecting publishing and communication."
the new freenet: ?!?
Even now when people in the US are organising against a fascist regime it's mostly WhatsApp and maybe Signal.
You're moving the debate here. The question was "How are the goals different?" from the project leader (who ought to know better), not whether moving them makes sense.
Others could argue that software nobody uses for its stated purpose has failed; but you are right that is technically a different discussion than the one you started.
Example publication: https://journals.sagepub.com/doi/abs/10.1177/135485651880663...
> What are the content patterns on Freenet? Four patterns were identified. Freenet is (1) an archive of deviant data resistant to censorship (2) a space dominated by content associated with masculinity, (3) a nonmarket space where commercial exchange is non-existent, and (4) an empty space with many requests not returning information, and many flogs abandoned. We asked a third question: How does the analysis of Freenet inform current understandings of hacker culture? Freenet, we suggest, can be understood as a type of digital “wilderness”. It is a singular darknet space, supporting a distinct set of hacker practices
Practically: people in Hyphanet blog about stuff they dare not blog about in the clearnet -- anything from radical politics (from all kinds, left, right, libertarian, …) over personal opinion pages to wilder stuff like magick (yes, in that spelling).
Not to forget the Russian Poet who’s posting daily poems with the goal (as he wrote) that those poems still survive after police knocked at his door.
(besides talk about hyphanet and privacy tech)
So yes: I don’t understand the downvotes either, because it’s a legitimate question with a pretty clear answer: yes.
Perhaps.
Though reusing the name for an entirely different project with a different codebase is disingenuous to say the least.
That won't do his reputation any good, especially in a field where reputation matters.
Well, that name pretty much dooms the project to a slow death in obscurity.
https://news.ycombinator.com/item?id=40469711 - Ian Clarke explains the next generation of Freenet [video] (2023)
Also Freenet is much more general, you could think of Napster like a shared hard drive, whereas Freenet is like a shared computer capable of running decentralized applications like group chat, social networks, search engines, etc.
- The synced value is a history of client updates, sorted in some eventually consistent order (e.g. by hybrid logical clocks). Merging takes the union of the update sets.
- The user-visible value is the result of processing these updates in order, using arbitrary contract code.
This is overkill for simple last-writer-wins values, but it lets you support fairly general data types & arbitrary update functions, including ones that preserve application-specific invariants.
The Automerge CRDT library works like this already [1][2], but it only allows specific updates to JSON data. Sharing code via your contracts solves the hard part of generalizing that to arbitrary data & updates.
Yes, in fact you can implement this within the current framework, for example with our group chat River, each room state maintains a list of the N most recent messages sorted by (approximate) timestamp.
The idea is that you can adapt the merge logic to the needs of the specific application, and I think a time ordered event log will be a common pattern.
One weakness is that we trust the message author to provide an accurate message timestamp, however bad behavior such as manipulating timestamps can be addressed by banning the user from the room.
I also would like to see an emphasis on local-first approaches.
This experiment, in the spirit of UNIX, composes git and text files to form a social network:
https://github.com/dharmatech/9social
Video demo: https://youtu.be/q6qVnlCjcAI
OK, time for inception... 9social on freenet-git
¯ \ _ ( ツ ) _ / ¯
I integrated "Fair Tunes", which tried to pay musicians for mp3 files, long before any label was selling mp3's.
(Edit: I just remembered Freshmeat automatically rejecting Snarfzilla because they were so sick of projects ending in *zilla. The owner thought it was cool and added it after I emailed. No idea why I used 'snarf'. I've never said it out loud.)
Ed: I guess you'd need a way to run wasm in wasm, and a way to author wasm contracts - and there's not yet a wasm-hosted rust compiler?
Ed2: I'm not up to date on the state of self-hosted wasm compiler/languages... But I did come across:
https://github.com/remko/waforth
I guess it's time to dig out the thesis[t] again and look at movable code and p2p classifications again ...
[t] https://ics.uci.edu/~fielding/pubs/dissertation/net_arch_sty...
Which then led to people storing Bad Stuff, and this is somehow addressed in the new version? (I also read some stuff about friends and trust in the previous one, but haven't looked into properly.)
I think understanding the old one and the issues it ran into would be helpful for understanding the context, and the motivations for the changes.
Or to put it very bluntly: what is this, why should I care, and why not just use the old one?
Thanks
If you don't mind I'll quote the FAQ[1]:
The previous and current versions of Freenet have several key differences:
Functionality: The previous version was analogous to a decentralized hard drive, while the current version is analogous to a full decentralized computer.
Real-time Interaction: The current version allows users to subscribe to data and be notified immediately if it changes. This is essential for systems like instant messaging or group chat.
Programming Language: Unlike the previous version, which was developed in Java, the current Freenet is implemented in Rust. This allows for better efficiency and integration into a wide variety of platforms (Windows, Mac, Android, MacOS, etc).
Transparency: The current version is a drop-in replacement for the world wide web and is just as easy to use.
Anonymity: While the previous version was designed with a focus on anonymity, the current version does not offer built-in anonymity but allows for a choice of anonymizing systems to be layered on top.
> Which then led to people storing Bad Stuff, and this is somehow addressed in the new version? (I also read some stuff about friends and trust in the previous one, but haven't looked into properly.)
The new version doesn't claim to provide anonymity as part of the platform itself although anonymity systems can be built on top of it. I'd also refer you to this FAQ [2].
[1] https://freenet.org/about/faq/#how-do-the-previous-and-curre...
[2] https://freenet.org/about/faq/#how-does-freenet-handle-harmf...
I am thinking about making a public proxy available so people can try the network itself without installing it, but we've made installation as quick and painless as possible.
Imagine an application where an authorized group of users can create and vote in polls, using cryptographic signatures and public/private keys for user verification.
What prevents me from connecting and saying that "everybody's state is wrong, that poll in 2024 which didn't reach quorum actually did, because I voted in it, here's my vote." How can the state merger know that the existing state has been valid for two years, and that the vote shouldn't be retroactively applied?
Blockchains solve this by having state get more authoritative as blocks age. To undo the `poll_didnt_reach_quorum` state transition from 2024, one would have to rewind all blocks that have been created since, and PoW / PoS ensures that this is incredibly costly to do.
On a related note, how does your design prevent sybil attacks, where one participant floods the network with many large contracts and large state updates?
> It feels like the state merging approach just pushes the hard problems onto the user, without giving them the tools to solve those problems properly.
We've created many of these tools, and have used them to implement practical applications like group chat, a CMS, and a social network, and we and others will build many more tools over time. Designing applications for Freenet can require some creative problem solving, but each problem only needs to be solved once.
> What prevents me from connecting and saying that "everybody's state is wrong, that poll in 2024 which didn't reach quorum actually did, because I voted in it, here's my vote." How can the state merger know that the existing state has been valid for two years, and that the vote shouldn't be retroactively applied?
You could solve this similarly to Bitcoin by having a mechanism that "locks" poll results at a particular point in time to prevent subsequent additions, analogous to how mining repeatedly locks in the blockchain.
> On a related note, how does your design prevent sybil attacks, where one participant floods the network with many large contracts and large state updates?
Peers in the network track cost/benefit of each connected peer, so if a peer starts to consume a lot more resources than it provides then its neighbors will disconnect, a kind of immune response.
I'm sure that once the network is big enough to attract large-scale attacks we'll need to adapt our approach, but I think we have a solid starting point.
Been chatting a lot with the HolePunch/Tether folks, and their work is impressive, particularly the use of the DHT for all signaling, Tailscale-inspired (aka Birthday Paradox) NAT hole-punching, an entire JavaScript runtime, etc. I'm curious about some of those details in Freenet. In particular, does it do fully decentralized hole punching?
Either way, congrats!
> What's it look like over the wire?
Encrypted UDP, but likely identifiable based on timing etc - we're not trying to hide it right now - the focus is more on decentralization.
> In particular, does it do fully decentralized hole punching?
Depends on what you mean by "fully". When peers first start up they need to connect to a "gateway", a freenet peer that can receive unexpected inbound UDP. But gateways are only required to introduce peers to the network, after the initial introduction they form new connections through the network.
Right now we run these introductory gateways but will decentralize it over time.
Curious about mobile though, you mentioned iOS is the main blocker because of wasm restrictions. Is the plan to run the peer on desktop and have mobile just connect to it, or are you expecting people to run a full peer on Android?
Now, whether giving up anonymity was worth it is a separate issue.
Freenet seems to not interoperate with the existing WWW as much, while at the same time giving more specification on a specific routing and WASM validator. The existing WWW and Braid leave those decisions up to each particular host/authority to decide.