Convert Figma logo to code with AI

hyphanet logofred

Freenet REference Daemon

1,007
206
1,007
55

Top Related Projects

1,007

Freenet REference Daemon

RetroShare is a Free and Open Source cross-platform, Friend-2-Friend and secure decentralised communication platform.

16,006

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:

  1. Download the installer from the official website: https://freenetproject.org/
  2. Run the installer and follow the setup wizard
  3. Once installed, open your web browser and navigate to http://127.0.0.1:8888/
  4. Follow the first-time setup process to configure your node
  5. 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

1,007

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.

16,006

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Build Status Coverity status

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:

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 withbuild/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

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 and res/wrapper.conf and res/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.