Skip to main content

Decentralized Communication: Security, Freedom, and the Future of Social Platforms

· 5 min read
Faycal Alami-Hassani
Website's owner

Across the modern internet, a few giant corporations have gained outsized influence over how people connect, share, and discover information. These centralized services profit from harvesting personal data while keeping users locked inside controlled ecosystems. Decentralized platforms are the counterweight — systems designed to distribute power, enhance privacy, and put control back into the hands of their communities.

My Neighbor Mastodon (and Fediverse)
"My Neighbor Mastodon (and Fediverse)" by David Revoy is licensed under CC BY-SA 4.0.

Why Decentralization Strengthens Security

A decentralized network is made up of many independently managed servers (often called nodes or instances), linked by open protocols. This structure brings tangible security and privacy advantages:

  • No Single Point of Failure — In a centralized model, one breach can expose millions. In a decentralized model, an attack on one server doesn’t endanger the whole network.
  • Ownership of Your Data — You decide where your information is stored, and who has access to it. This makes bulk surveillance and mass data mining far more difficult.
  • Resistance to Censorship — No one entity can shut down the entire system; communities remain online even if one provider disappears.
  • Custom Security Policies — Each instance can choose its own encryption methods, moderation standards, and backup strategies.

What Is the Fediverse?

The Fediverse (federated universe) is a constellation of independently hosted platforms that communicate using open protocols like ActivityPub, OStatus, and Diaspora. It’s not a single app—it’s a network of apps that can talk to each other.

Fediverse Architecture

  • Network Layer: Protocols like ActivityPub enable semantic communication between servers.
  • Application Layer: Platforms like Mastodon, Friendica, and GNU Social provide user interfaces and features.
  • User Layer: People interact across apps without needing multiple accounts.

Think of it like email: Gmail, Outlook, and Yahoo are different services, but they all speak the same language (SMTP). The Fediverse works similarly.

Three Practical Platforms to Explore

1. Friendica — The Decentralized Facebook Alternative

What it is: A full-featured social network supporting long-form posts, groups, events, and media sharing.

Security edge: Bridges multiple protocols (ActivityPub, OStatus, Diaspora), enabling redundant and diverse communication paths. Self-hosting gives you full control over your data.

Best for: Users seeking a familiar Facebook-style experience without surveillance or ads.

Installation Requirements:

  • Web server: Apache or Nginx
  • PHP: 7.4–8.2 with required extensions
  • Database: MariaDB or MySQL
  • Mail setup: Required for notifications
  • Cron jobs: For background tasks
  • HTTPS: Strongly recommended

Setup Time: 2–4 hours for experienced users

Install Methods: GitHub clone, Docker, or YunoHost

Official site: https://friendi.ca


2. Mastodon — The Decentralized Twitter/X Alternative

What it is: A microblogging platform with timelines, hashtags, and boosts (retweets), built on federation.

Security edge: No central database to target. Admins can enforce strong moderation and security policies.

Best for: Users who enjoy open conversation streams and community-led moderation.

Installation Requirements:

  • OS: Ubuntu 20.04 or 22.04
  • Languages: Ruby, Node.js
  • Database: PostgreSQL
  • Other: Redis, Sidekiq, Certbot
  • SMTP: Required for email notifications

Setup Time: 3–6 hours depending on experience

Install Methods: Manual setup or managed hosting (e.g., masto.host)

Official site: https://joinmastodon.org


3. GNU Social — The Lightweight Tumblr/Old Twitter Alternative

What it is: A minimalist microblogging platform with federation support.

Security edge: Simple codebase makes it easy to audit and harden. Ideal for small, privacy-conscious communities.

Best for: Users who want low-maintenance tools and tight control.

Installation Requirements:

  • Web server: Apache, Nginx, or Lighttpd
  • PHP: 5.5+ with required extensions
  • Database: MariaDB or MySQL

Setup Time: 1–2 hours for basic setup

Install Methods: Manual or FTP upload

Official site: https://gnusocial.rocks/


How These Platforms Put You in Control

  • Breaking Free from Monopolies — No need to accept the terms of a single company or adapt to sudden policy changes.
  • Privacy by Design — Choose an instance aligned with your values, or host your own for maximum control.
  • Interconnection Across Platforms — Open standards allow you to interact with people on other services without creating multiple accounts.
  • Community Governance — Local administrators and members decide the rules and priorities, not corporate boards.

Security Tips for Using Decentralized Networks

Whether joining a public instance or creating your own, consider:

  • Enable HTTPS to encrypt your data in transit.
  • Keep all software up to date to fix vulnerabilities promptly.
  • Store only the data you really need, to reduce potential exposure.
  • Make regular backups so your content is never at risk of permanent loss.

Mapping the Fediverse to Centralized Counterparts

Fediverse PlatformCentralized EquivalentKey Differences
FriendicaFacebookNo ads, federated groups, full data control
MastodonTwitter/XNo algorithmic feed, community moderation
GNU SocialTumblr / Old TwitterLightweight, minimalistic, open-source

Security Feature Comparison

FeatureFriendicaMastodonGNU Social
Decentralized / FederatedActivityPub, OStatus, DiasporaActivityPubOStatus & ActivityPub
Self-Hosting PossibleYesYesYes
Encryption in TransitHTTPS (admin setup)HTTPS by defaultHTTPS (admin setup)
Data ControlHigh — strict privacy policiesHigh — clear privacy commitmentsHigh — tight control in small deployments
User Data PortabilityExport/import supportedExport/import supportedLimited portability
InteroperabilityExcellent — bridges multiple protocolsStrong — ActivityPubGood — OStatus/ActivityPub
Moderation FlexibilityPer-instance rulesRobust block/mute featuresPer-instance rules
Maturity & SecurityStable, active dev communityMature, large communityLong-standing, smaller dev base
Ease of Auditing CodeOpen-source, actively maintainedOpen-source, actively maintainedOpen-source, simple codebase

Looking Ahead

Friendica, Mastodon, and GNU Social aren’t just alternatives—they’re blueprints for a freer internet. They foster resilience, encourage innovation, and make mass data exploitation far more difficult. The challenge ahead is scaling these platforms while preserving their core values: openness, autonomy, and community-driven governance.

Final Thought

If privacy, control, and digital self-determination matter to you, joining the Fediverse is more than a tech choice—it’s a statement. It’s a step toward reshaping the internet into a space that serves people, not corporations.

Ready to take control? The future is federated.

Why You Shouldn’t Copy Your Python Virtual Environment Folder

· 3 min read
Faycal Alami-Hassani
Website's owner

As a technical writer working extensively with Python-based documentation tools like Sphinx, I rely heavily on virtual environments to isolate dependencies and keep my projects reproducible.

One mistake I made early on—and one I see others make too—is trying to copy or migrate the entire virtual environment folder (venv) from one location to another.

It seems convenient, but it’s a trap. Let me walk you through why this doesn’t work reliably, what actually breaks, and how to fix it the right way.


The Problem: Copying the venv Folder Breaks Path Bindings

When you create a virtual environment using:

python -m venv venv

Python generates a folder named venv (or whatever name you choose) that contains:

  • The Python interpreter binaries
  • Scripts for activating the environment
  • A pyvenv.cfg file with absolute paths
  • Site-packages and installed dependencies

The issue? The pyvenv.cfg file and internal scripts contain hardcoded absolute paths to the original Python executable and environment location. If you move the folder to a different directory or machine, those paths become invalid.

note

More about the creation of virtual environments can be found on the Python official website.

Example: pyvenv.cfg Contents

home = C:\Users\Me\AppData\Local\Programs\Python\Python311
include-system-site-packages = false
version = 3.11.4

If you copy the venv folder to a new location, say D:\Projects\NewSite\venv, the activation scripts and interpreter references will still point to the old path. On Windows, this often results in cryptic errors when trying to activate or run Python from the environment.


The Hack: Rewriting pyvenv.cfg

Some developers try to manually edit pyvenv.cfg and update the home path. While this can work in very limited cases, it’s not reliable. The activation scripts (activate, activate.bat, activate.ps1) and internal symlinks may still break, especially across operating systems or Python versions.


The Right Way: Recreate the Virtual Environment

Here’s the clean, reproducible workflow I now follow for every Sphinx documentation project:

1. Create a requirements.txt or pyproject.toml

Before migrating, freeze your dependencies:

pip freeze > requirements.txt

Or use a modern tool like Poetry to manage dependencies via pyproject.toml.

2. Delete the Old venv Folder

rm -r venv  # macOS/Linux
rmdir /S /Q venv # Windows

3. Recreate the Environment in the New Location

python -m venv venv

4. Reinstall Dependencies

# macOS/Linux
source venv/bin/activate

# Windows
venv\Scripts\activate

pip install -r requirements.txt

Or if using Poetry:

poetry install

Bonus Tip: Use .venv for Consistency

Many tools (like Poetry and VS Code) look for a .venv folder in the project root. Naming your environment .venv keeps things tidy and avoids cluttering your workspace.


Summary

❌ Don't Do This✅ Do This Instead
Copy/paste venv folderRecreate it with python -m venv
Manually edit pyvenv.cfgUse requirements.txt or pyproject.toml
Assume cross-platform compatibilityRebuild per system

Final Thoughts

Virtual environments are essential for clean Python workflows, especially in documentation projects where reproducibility matters. But they’re not portable in the way you might expect. Rebuilding them is fast, reliable, and avoids the headaches of broken paths and activation errors.

Entering Text Mode in Fedora

· 2 min read
Faycal Alami-Hassani
Website's owner
note

The following blog post is a self-reminder for troubleshooting Linux distros when access to graphical mode is not possible.

I recently messed up the SELinux configuration on a Fedora distro while trying to relabel the filesystem on boot with this command:

fixfiles -B onboot

After running the command and restarting the OS, the relabeling process was failing repeatedly, leading my system to an infinite reboot loop.

Fixing a messed-up SELinux configuration
Picture by the Electronic Frontier Foundation under CC BY 2.0 license

To fix this issue, I had to boot into text-only mode and change the SELinux mode temporarily from Enforced to Disabled.

Here are the steps to boot into text-only mode:

  1. Restart the system to access the GRUB menu.
  2. Select the kernel version that you want to boot into, then press the e key instead of Enter to edit the desired version.
  3. Scroll down until you reach the quiet parameter. Next, add a white space and number three 3 just after the quiet parameter (i.e., quiet 3). Here is a full example:
kernel /vmlinuz-2.6.9-1.667 ro root=LABEL=/ acpi=on rhgb quiet 3
  1. Press Ctrl+X to start
  2. The system will boot into the new runlevel this time only.
info

A runlevel is a number indicating what "mode" you want the system to boot into. For instance, runlevel 3 is text-only mode, while runlevel 5 refers to graphical mode.

Unmet Dependencies in Docusaurus

· 3 min read
Faycal Alami-Hassani
Website's owner

This is the first time that I am facing issues with unmet dependencies in Docusaurus after a Yarn Upgrade.

What is Docusaurus?

Docusaurus is an SSG (short for Static Site Generator). Static Site Generators are software frameworks that generate static HTML webpages using templates, components, and plain-text files.

The plain-text files make use of markup languages such as Markdown. Since there are neither databases nor dynamic content involved, the static HTML files load pretty fast.

There are many SSGs on the web to choose from. Docusaurus, Hugo, and Eleventy are just some of the most famous ones among them. It is up to you to select the brand that best suits your needs.

Docusaurus offers some very interesting features, including:

  • versioning capabilities
  • contextual and faceted navigation based on a integrated search engine
  • built-in support for the standard file format MDX, which allows you to embed the JavaScript extension syntax JSX into your Markdown

These and other features make it a great fit to create beautiful static documentation sites.

What is Yarn?

Yarn is a JavaScript package manager that was developed to address some shortcomings of its predecessor npm, the default package manager for Node.js.

Packages, Manifests, and Package Managers

Developers use packages to share their code. In addition to the actual code, each package contains a manifest file, also called package.json.

The manifest file describes the package itself using a lightweight data-interchange format called JSON (JavaScript Object Notation).

Here is an excerpt of a manifest:

{
"name": "@anycli/manifest-file",
"description": "base json file wrapper used inside anycli",
"version": "0.3.9",
"author": "Jeff Dickey @jdxcode",
"bugs": "https://github.com/anycli/manifest-file/issues",
"dependencies": {
"cli-ux": "^3.3.13",
"debug": "^3.1.0",
"fs-extra": "^5.0.0",
"load-json-file": "^4.0.0",
"lodash": "^4.17.4",
"proper-lockfile": "^3.0.2"
}

Source code available on GitHub under: oclif / manifest file

A package manager relies on the manifest to determine the properties of each specific package, e.g. name, version, and dependencies.

To avoid any future conflicting packages in your project, you are better advised to select a specific package manager right from the start and stick to it.

If you want to learn more about the differences between yarn and npm, I suggest you read the following article: npm vs. yarn: Which Package Manager Should You Choose?

Troubleshooting Yarn Upgrade in Docusaurus

Yesterday, I got a warning message prompting me to upgrade Yarn while I was testing Docusaurus on my local development environment.

After running the upgrade with the following command:

$ yarn upgrade @docusaurus/core@latest @docusaurus/preset-classic@latest

I got several warning messages regarding unmet peer dependencies:

$ warning "@docusaurus/core > react-dev-utils > fork-ts-checker-webpack-plugin@6.5.0" has unmet peer dependency "typescript@>= 2.7".
$ warning "@docusaurus/preset-classic > @docusaurus/theme-search-algolia > @docsearch/react@3.0.0" has unmet peer dependency "@types/react@>= 16.8.0 < 18.0.0".

To resolve the issue, I had to install the latest versions of the following packages inside my project:

$ yarn add typescript@2.7.2
$ yarn add "@types/react@>= 16.8.0 < 18.0.0"

Once the installation has completed, I wanted to make sure that the problem was resolved, so I regenerated the content with the command:

$ yarn run build

Then I used the following command to test my build locally:

$ yarn run serve

That's it! Everything is working fine now ☀️.

Copyright © GlobalTech Translations 2022.

Modify The Welcome Text In GNU Social

· 2 min read
Faycal Alami-Hassani
Website's owner

Besides having some external accounts on federated social networks such as Mastodon, I am also running my own instances on a VPS sever for my digital company.

One of these instances is dedicated to GNU Social, a social communication software for public and private communications. GNU Social is an old, but robust platform that supports the protocols OStatus and ActivityPub.

Fediverse - Federated Social Networks
Picture by Eukombos on Wikimedia Commons under CC BY-SA 4.0 license

GNU Social comes with some default stable themes. However, the look and feel of those themes is very 90's to me. If you want to give your GNU Social instance a brand-new look, you can use something more exciting such as Qvitter.

I am very happy with Qvitter and its intuitive design. Nevertheless, I wanted to customize the initial welcome text that appears on the main page:

We are a federation of microbloggers who care about social justice and solidarity and want to quit the centralised capitalist services.

Initial Welcome Text on GNU Social&#39;s Main Page

To modify the text indicated above, go to your site root directory, then navigate to the folder locale under the following path:

$ cd plugins/Qvitter/locale 

Once in the locale folder, open the file en.json with your preferred text editor. In this case, I am using nano:

$ sudo nano en.json 

Look for the line that starts with welcomeText, or use the shortcut Ctrl-W in your terminal to search for the text if you are using nano.

Replace with the text you would like to see on your welcome screen, then save and close your file. 😎 The result should look like this:

New Welcome Text on GNU Social&#39;s Main Page

If you want to learn more about the fediverse, you can also read my other blog article on the topic: Random Thoughts About the Federation/Fediverse.

Copyright © GlobalTech Translations 2022.

RTL, LTR, and Absent-Mindedness

· 4 min read
Faycal Alami-Hassani
Website's owner

In localization, RTL (Right-to-Left) refers to languages that read from right to left, such as Arabic and Hebrew.

As someone who grew up in a bilingual environment, i.e. Arabic and French, making the difference between languages with opposite script directions is the most natural thing in the world. That being said, I recently had an amusing incident that I would like to relate here.

Labyrinth and directions
Picture by the Electronic Frontier Foundation under CC BY 2.0 license

It all began when I attended a webinar about the role of pictures in intercultural communication some weeks ago. The speaker, who was using a Japanese brochure to illustrate an example of non-Latin scripts, started talking about RTL languages and confusing both directions, which in fact are opposite to each other.

During five minutes that seemed like an eternity, our speaker kept using the acronym RTL to refer to a Right-to-Left layout while erroneously telling the audience that RTL was an acronym for Left-to-Right.

RTL or LTR
Right-to-Left or Left-to-Right? Help is on the way!
Picture by Wikimedia Commons under CC BY-SA 3.0 license

To my surprise, nobody from the attendees called his attention to the mistake. It seemed like the participants had the “autocorrect” function turned on in their brain, correcting by themselves the inaccurate information.

So, what about the Japanese language? Is it an RTL or an LTR script? Well, both answers are true. 😎 In Fact, you can write Japanese in both directions depending on the writing system you are applying:

  • Tategaki (vertical writing): starting at the top of the right-hand column, then moving to the next vertical column on the left;
  • Yokogaki (horizontal writing): from left to right like European Romance languages.

If you are curious to know more about the reading direction in Japanese, I suggest you read the article “Is Japanese Read from Right to Left or Left to Right?” by Team Japanese.

Getting back to our presentation, it was quite interesting, but it had some flaws from the “intercultural” standpoint. Allow me to explain why.

At a certain stage of the presentation, the speaker showed an antique artwork from the Arab-Islamic World, and pointed out that artists from the aforesaid region used ornaments because drawing human beings is not allowed for religious reasons.

While it is partly true that artists from the Arab-Islamic World have used biomorphic design at a later stage as an integral part of their artwork (e.g. use of vegetal shapes and forms, also known as “al-Tawrīq”), the major part of these artistic creations is based on calligraphy and geometry by deriving patterns from basic geometric shapes, such as circles and squares.

A little introduction to this topic is the article “Geometry - The Language of Symmetry in Islamic Art” by Richard Henry.

The second shortcoming in the presentation consisted in the examples used to reflect cultural differences in technical documentation.

It was striking to see that the examples were too ethnocentric, to say the least. Judging by the names appearing in the attendees list, I presume that I was the only non-European in the meeting room.

Personally, I think that the choice of the examples was an unfortunate faux pas. The supporting materials would cause real indignation among the attendees if the presentation were to be held in front of a non-European audience (e.g. in an Asian or African country).

Dear speaker, you are shooting yourself in the foot with such examples. If you have any non-European students, ask them for their input. You may need to adapt your content as soon as possible to avoid any misunderstandings with international audiences.

After all, your presentation is supposed to address intercultural challenges in technical communication.

Copyright © GlobalTech Translations 2022.