diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ca1bc79510..26979df834 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -234,16 +234,14 @@ jobs:
if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true
shell: docker exec -t builder sh -eu {0}
run: |
- scripts/desktop/build-lib-linux.sh
- cd apps/multiplatform
- ./gradlew packageDeb
+ scripts/desktop/make-deb-linux.sh
- name: Prepare Desktop
id: linux_desktop_build
if: startsWith(github.ref, 'refs/tags/v') && matrix.should_run == true
shell: bash
run: |
- path=$(echo ${{ github.workspace }}/apps/multiplatform/release/main/deb/simplex_*_amd64.deb )
+ path=$(echo ${{ github.workspace }}/apps/multiplatform/release/main/deb/simplex_amd64.deb )
echo "package_path=$path" >> $GITHUB_OUTPUT
echo "package_hash=$(echo SHA2-256\(${{ matrix.desktop_asset_name }}\)= $(openssl sha256 $path | cut -d' ' -f 2))" >> $GITHUB_OUTPUT
diff --git a/Dockerfile.build b/Dockerfile.build
index 76bb1127f2..9b7c38fa87 100644
--- a/Dockerfile.build
+++ b/Dockerfile.build
@@ -16,6 +16,7 @@ RUN apt-get update && \
apt-get install -y curl \
libpq-dev \
git \
+ strip-nondeterminism \
sqlite3 \
libsqlite3-dev \
build-essential \
diff --git a/README.md b/README.md
index 40d552b84d..554c6068d9 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!
-[
](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html) [
](https://www.privacyguides.org/en/real-time-communication/#simplex-chat) [
](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/)
+[
](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html) [
](https://www.privacyguides.org/en/real-time-communication/#simplex-chat) [
](https://www.whonix.org/wiki/Chat#Recommendation) [
](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/)
## Welcome to SimpleX Chat!
@@ -110,6 +110,15 @@ After you connect, you can [verify connection security code](./blog/20230103-sim
Read about the app features and settings in the new [User guide](./docs/guide/README.md).
+## Contribute
+
+We would love to have you join the development! You can help us with:
+
+- [share the color theme](./docs/THEMES.md) you use in Android app!
+- writing a tutorial or recipes about hosting servers, chat bot automations, etc.
+- contributing to SimpleX Chat knowledge-base.
+- developing features - please connect to us via chat so we can help you get started.
+
## Help translating SimpleX Chat
Thanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat/), SimpleX Chat apps, website and documents are translated to many other languages.
@@ -141,15 +150,6 @@ Join our translators to help SimpleX grow!
Languages in progress: Arabic, Japanese, Korean, Portuguese and [others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed – please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us!
-## Contribute
-
-We would love to have you join the development! You can help us with:
-
-- [share the color theme](./docs/THEMES.md) you use in Android app!
-- writing a tutorial or recipes about hosting servers, chat bot automations, etc.
-- contributing to SimpleX Chat knowledge-base.
-- developing features - please connect to us via chat so we can help you get started.
-
## Please support us with your donations
Huge thank you to everybody who donated to SimpleX Chat!
diff --git a/images/privacy-guides.jpg b/images/privacy-guides.jpg
index f15a8862f7..5876d10c02 100644
Binary files a/images/privacy-guides.jpg and b/images/privacy-guides.jpg differ
diff --git a/images/whonix-logo.jpg b/images/whonix-logo.jpg
new file mode 100644
index 0000000000..c6fc4729b2
Binary files /dev/null and b/images/whonix-logo.jpg differ
diff --git a/scripts/desktop/make-appimage-linux.sh b/scripts/desktop/make-appimage-linux.sh
index 6cc7aac011..ffd5e13337 100755
--- a/scripts/desktop/make-appimage-linux.sh
+++ b/scripts/desktop/make-appimage-linux.sh
@@ -37,13 +37,27 @@ cp *imple*.desktop usr/share/applications/
cp $multiplatform_dir/desktop/src/jvmMain/resources/distribute/*.appdata.xml usr/share/metainfo
if [ ! -f ../appimagetool-x86_64.AppImage ]; then
- wget --secure-protocol=TLSv1_3 https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O ../appimagetool-x86_64.AppImage
+ wget --secure-protocol=TLSv1_3 https://github.com/simplex-chat/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O ../appimagetool-x86_64.AppImage
chmod +x ../appimagetool-x86_64.AppImage
fi
if [ ! -f ../runtime-x86_64 ]; then
- wget --secure-protocol=TLSv1_3 https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64 -O ../runtime-x86_64
+ wget --secure-protocol=TLSv1_3 https://github.com/simplex-chat/type2-runtime/releases/download/continuous/runtime-x86_64 -O ../runtime-x86_64
chmod +x ../runtime-x86_64
fi
-../appimagetool-x86_64.AppImage --runtime-file ../runtime-x86_64 .
+# Determenistic build
+
+export SOURCE_DATE_EPOCH=1704067200
+
+# Delete redundant jar file and modify cfg
+rm -f ./usr/lib/app/*skiko-awt-runtime-linux*
+sed -i -e '/skiko-awt-runtime-linux/d' ./usr/lib/app/simplex.cfg
+
+# Set all files to fixed time
+find . -exec touch -d "@$SOURCE_DATE_EPOCH" {} +
+
+../appimagetool-x86_64.AppImage --verbose --no-appstream --runtime-file ../runtime-x86_64 .
mv *imple*.AppImage ../../
+
+# Just a safeguard
+strip-nondeterminism ../../*imple*.AppImage
diff --git a/scripts/desktop/make-deb-linux.sh b/scripts/desktop/make-deb-linux.sh
new file mode 100755
index 0000000000..6f9de8a1e6
--- /dev/null
+++ b/scripts/desktop/make-deb-linux.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env sh
+
+scripts/desktop/build-lib-linux.sh
+cd apps/multiplatform
+./gradlew packageDeb
+
+# Workaround for skiko library
+#
+# Compose Multiplatform depends on skiko library, that
+# handles all of the window managment and graphics drawing.
+#
+# This skiko library comes with two jar's:
+# - platform-agnostic "skiko-awt"
+# - and platform-specific "skiko-awt-runtime"
+#
+# In case of Linux, second jar is called "skiko-awt-runtime-linux-x64".
+# Essentially, this jar has the Linux .so library called "libskiko-linux-x64.so"
+# that is being unpacked to runtime libs.
+#
+# Since the jar is nothing more than a zip archive, extracting library
+# from "skiko-awt-runtime-linux-x64" modifies it's timestamps
+# with current time, which in changes it's hash, which in turn
+# makes the whole build unreproducible.
+#
+# It seems to be there is no way to handle this extraction in our code and
+# https://docs.gradle.org/current/userguide/working_with_files.html#sec:reproducible_archives
+# unfortunately doesn't solve the issue.
+#
+# Instead, just modify the deb, removing the redundant skiko library.
+#
+# Also, it seems this is related to:
+# https://youtrack.jetbrains.com/issue/CMP-1971/createDistributable-produces-duplicated-skiko-awt.jar-and-skiko-awt-runtime-windows-x64.jar
+
+export SOURCE_DATE_EPOCH=1704067200
+
+dpkg-deb -R ./release/main/deb/simplex*.deb ./extracted
+
+rm -f ./extracted/opt/*imple*/lib/app/*skiko-awt-runtime-linux*
+sed -i -e '/skiko-awt-runtime-linux/d' ./extracted/opt/*imple*/lib/app/simplex.cfg
+find ./extracted/ -exec touch -d "@$SOURCE_DATE_EPOCH" {} +
+
+dpkg-deb --build --root-owner-group --uniform-compression ./extracted ./release/main/deb/simplex_amd64.deb
+
+strip-nondeterminism ./release/main/deb/simplex_amd64.deb
diff --git a/website/src/_includes/hero.html b/website/src/_includes/hero.html
index c0e2b3f30b..6ebfb883ef 100644
--- a/website/src/_includes/hero.html
+++ b/website/src/_includes/hero.html
@@ -31,6 +31,10 @@
+
+
+
+
@@ -43,7 +47,7 @@
-
+