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.
We've included the Gradle Wrapper as recommended by the Gradle project. If you trust the version we've committed you can build immediately:
$ ./gradlew jar
> gradlew jar
We've configured it to verify the checksum
of the archive it downloads from https://services.gradle.org
.
$ 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
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.
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.
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()
}
See our contributor guidelines.
- Ask the development mailing list
or join us in IRC -
#freenet
onirc.libera.chat
. - You can file problems in the bug tracker.
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
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.