Top Related Projects
Freenet REference Daemon
RetroShare is a Free and Open Source cross-platform, Friend-2-Friend and secure decentralised communication platform.
An IPFS implementation in Go
Quick Overview
Freenet is a peer-to-peer platform for censorship-resistant communication and publishing. It provides a decentralized network for anonymous file sharing, browsing, and publishing, with a focus on privacy and freedom of speech. The hyphanet/fred repository contains the core implementation of Freenet.
Pros
- Strong focus on privacy and anonymity
- Decentralized architecture resistant to censorship
- Long-standing project with an established user base
- Open-source and community-driven development
Cons
- Slower speeds compared to traditional internet browsing
- Steep learning curve for new users
- Limited content availability compared to the clearnet
- Potential for misuse by bad actors due to anonymity features
Getting Started
To get started with Freenet:
- Download the installer from the official website: https://freenetproject.org/
- Run the installer and follow the setup wizard
- Once installed, open your web browser and navigate to http://127.0.0.1:8888/
- Follow the first-time setup process to configure your node
- Start exploring Freenet by using the built-in search functionality or accessing known Freesites
Note: Freenet requires Java to run. Make sure you have Java installed on your system before proceeding with the installation.
Competitor Comparisons
Freenet REference Daemon
Pros of fred
- Identical repository to hyphanet/fred>
- No unique advantages identified
Cons of fred
- Potentially confusing naming convention with trailing ">"
- May lead to issues with URL parsing or linking
Code comparison
Both repositories contain identical code. Here's a sample from the build.gradle
file in both:
apply plugin: 'java'
apply plugin: 'eclipse'
sourceCompatibility = 1.8
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Freenet REference Daemon',
'Implementation-Version': version
}
}
Summary
The repositories hyphanet/fred and hyphanet/fred> appear to be identical in content. The only noticeable difference is the trailing ">" in the second repository name, which could potentially cause confusion or issues when referencing the repository. It's unclear why two identical repositories exist with such similar names. Users should be cautious when choosing between these repositories and may want to investigate further to determine if there are any intended differences or if one is meant to supersede the other.
RetroShare is a Free and Open Source cross-platform, Friend-2-Friend and secure decentralised communication platform.
Pros of RetroShare
- More active development with frequent updates and commits
- Broader feature set including file sharing, messaging, forums, and channels
- Cross-platform support for Windows, macOS, and Linux
Cons of RetroShare
- Larger codebase and potentially more complex to maintain
- May have a steeper learning curve for new users due to extensive features
- Less focus on anonymity compared to Fred's design
Code Comparison
RetroShare (C++):
void RsFileTransfer::getFileTransferInfo(const RsFileHash& hash, FileInfo& info)
{
RsStackMutex stack(mTransfersMutex);
std::map<RsFileHash, FileInfo>::iterator it = mTransfers.find(hash);
if (it != mTransfers.end())
info = it->second;
}
Fred (Java):
public synchronized void start(Config config) throws NodeInitException {
if(isStarted()) throw new IllegalStateException("Already started");
this.config = config;
node.start(false);
started = true;
}
The code snippets show different programming languages and approaches, with RetroShare using C++ and focusing on file transfer management, while Fred uses Java and demonstrates node initialization.
An IPFS implementation in Go
Pros of Kubo
- More active development with frequent updates and contributions
- Larger community support and ecosystem of tools/applications
- Better documentation and easier onboarding for new users
Cons of Kubo
- Higher resource consumption, especially for storage
- Less focus on anonymity compared to Fred's design
- More complex architecture, potentially harder to audit
Code Comparison
Fred (Java):
public class Node {
private final NodePeer peer;
private final NodeClientCore core;
// ...
}
Kubo (Go):
type IpfsNode struct {
Identity peer.ID
Repo repo.Repo
Pinning pin.Pinner
Mounts Mounts
// ...
}
Both projects implement distributed networking, but Fred focuses on anonymity and censorship resistance, while Kubo aims for a more general-purpose content-addressed system. Fred uses Java, which may offer better cross-platform compatibility, while Kubo's Go implementation potentially provides better performance. Kubo has a more modular design, evident in its struct composition, whereas Fred's architecture appears more tightly coupled.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Freenet
Freenet is a platform for censorship-resistant communication and publishing. It is peer-to-peer software which provides a distributed, encrypted, decentralized datastore. Websites and applications providing things like forums and chat are built on top of it.
Fred stands for Freenet REference Daemon.
Building
We've included the Gradle Wrapper as recommended by the Gradle project. If you trust the version we've committed you can build immediately:
POSIX / Windows PowerShell:
$ ./gradlew jar
Windows cmd:
> gradlew jar
We've configured it to verify the checksum
of the archive it downloads from https://services.gradle.org
.
Build with ant
$ mkdir -p lib; cd lib && grep -o CHK.* ../dependencies.properties | xargs -P16 -I {} bash -c 'fcpget -v {} "$(echo {} | sed s,^.*/,,)"'
$ ant -propertyfile build.properties -f build-clean.xml -Dtest.skip=true -Dfindbugs.skip=true
Building the installers
The installers are built from specialized repositories:
- The GNU/Linux, macOS and *nix installer is built from hyphanet/java_installer.
- The Windows installer is built from hyphanet/wininstaller-innosetup and signed with hyphanet/sign-windows-installer.
Free code signing for the Windows installer is provided by SignPath.io, the certificate by the SignPath Foundation.
Testing
Run Tests
To run all unit tests, use
./gradlew --parallel test
You can run specifics tests with a test filter similar to the following:
./gradlew --parallel test --tests *M3UFilterTest
TODO: how to run integration tests.
Run your changes as node
To test your version of Freenet, build it with ,./gradlew jar, stop your node, replace
freenet.jarin your Freenet directory with
build/libs/freenet.jar`, and start your node again.
To override values set in build.gradle
put them into the file
gradle.properties
in the format variable = value
. For instance:
org.gradle.parallel = true
org.gradle.daemon = true
org.gradle.jvmargs=-Xms256m -Xmx1024m
org.gradle.configureondemand=true
tasks.withType(Test) {
maxParallelForks = Runtime.runtime.availableProcessors()
}
Contributing
See our contributor guidelines.
Get in contact
- Ask the development mailing list
or join us in IRC -
#freenet
onirc.libera.chat
. - You can file problems in the bug tracker.
Add a new dependency
All dependencies must be available via Freenet, so it must be added to dependencies.properties.
- Add it to build.gradle dependencies and dependencyVerification.
Run
./gradlew jar --debug
to find files that fail the verification. - fcpupload {dependencyfile.jar}
- add it to all installers: wininstaller-innosetup, java_installer, mactray. Search for
jna-platform
to find out where to put and register the dependency. - add dependency and the CHK to
dependencies.properties
. - update
scripts/update.sh
andres/wrapper.conf
andres/unix/run.sh
in java_installer to include the dependency.
With the example of pebble: The filename is just the jarfile. The key is what fcpupload returns. Size is wc -c filename.jar
, sha256 is sha256sum filename.jar
, order is where it should be put in wrapper.conf
in wrapper.java.classpath.
pebble.version=3.1.5
pebble.filename=pebble-3.1.5.jar
pebble.filename-regex=pebble-*.jar
pebble.key=CHK@y~p8HMUVXmVgfSnrmUyu2UNXMO9uMDHS5nwo2YuOKvw,yzwLFP0GXa8RjwRpicQCPFKNggDXLkTQKH8nISe0qUY,AAMC--8/pebble-3.1.5.jar
pebble.size=318169
pebble.sha256=85e77f9fd64c0a1f85569db8f95c1fb8e6ef8b296f4d6206440dc6306140c1a1
pebble.type=CLASSPATH
pebble.order=4
Licensing
Freenet is under the GPL, version 2 or later - see LICENSE.Freenet. We use some code under the Apache license version 2 (mostly apache commons stuff), and some modified BSD code (Mantissa). All of which is compatible with the GPL, although arguably ASL2 is only compatible with GPL3. Some plugins are GPL3.
Top Related Projects
Freenet REference Daemon
RetroShare is a Free and Open Source cross-platform, Friend-2-Friend and secure decentralised communication platform.
An IPFS implementation in Go
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot