A search tool for free software replacements.

troler 90a8fa10a6 Add 'apps/NotepadNext.json' 2 gadi atpakaļ
apps 90a8fa10a6 Add 'apps/NotepadNext.json' 2 gadi atpakaļ
data 4842789d9f Add 'data/generic/File_Explorer' 2 gadi atpakaļ
modules 1770c0fb1e Polished Render ( added feature matches ) / Added more data eplanations 2 gadi atpakaļ
.gitignore 7b2630a817 Config file addition 2 gadi atpakaļ
LICENSE 9d9e9a8229 Initial commit 2 gadi atpakaļ
OpenSans-ExtraBold.ttf 5cca6fe0ee added css file (fonts not working!) and modified server.py 2 gadi atpakaļ
OpenSans-ExtraBold.woff 5cca6fe0ee added css file (fonts not working!) and modified server.py 2 gadi atpakaļ
README.md 96686b2361 Made the footer less ugly and more 2 gadi atpakaļ
default.css 22c46de555 Added FAQ 2 gadi atpakaļ
faq.html 22c46de555 Added FAQ 2 gadi atpakaļ
screen_shot_01.png 569e20ab02 Screenshot updated 2 gadi atpakaļ
server.py 22c46de555 Added FAQ 2 gadi atpakaļ

README.md

Free Competitors

Free Competitors - is a server software to make websites that help users find Free Software replacements to proprietary software. And search Free Software alternatives to other Free Software.

Instances

http://5wxkwfl6n4abwjsqv5r6roebwbc7fnc22dq3clpooojzdmdnzzo3amad.onion/

Name

FSF likes the word "Replacement" more then "Alternative" since "Alternative" means that both are equally good. And non-free software is not good. But in my opinion both "Alternative" and "Replacement" tells the user that Non-Free Software is the default option. While I want to shatter this idea a bit by using "Competitor". I think it's the best I can do yet. But perhaps there is a better word. Please tell me if you know one.

License

This software is under the terms of AGPLv3 or any later version. So imagine GPLv3 or later with one more requirement. You need to publish the source code of the website, if you are hosting it. It has a handy button for source if you change nothing. If you change something, please upload your own version to some place and link to your source instead. Please see LICENSE file for more info.

Installation

The software is built on Python. So you will need to have python3 installed. Then you run the software by doing:

python3 server.py

On first run, you will be prompted to edit the newly created config.json. You should set the URL to be the URL in which you are hosting Free Competitors (ex. http://5wxkwfl6n4abwjsqv5r6roebwbc7fnc22dq3clpooojzdmdnzzo3amad.onion/). If you do not wish to set a URL, you should set it to /. Then, you should specify the port to serve on, and the CSS to use.

If you want your instance updated with all the new software constantly, please run a script of a similar nature from the same folder:

import time
import os
while True:
    time.sleep(300)       # Every 5 minutes
	os.system("git pull") # Pull the changes from git

Please tell us if you start an instance. We want to add it's link here.

How it works?

In apps folder there are a bunch of .json files with different data about various software. When the user types in the name of the software, it looks for a closest match of the name. So the user can slightly misspell the name and it will give him the software. Like somebody can type "What's Up" and get "WhatsApp".

Next, based on the other data, like features, file formats and supported networks it finds from the list, software that have some or all of the features. And sorts them based on how similar the feature set is.

The algorithm avoids recommending Non-Free Software. So if you type "WhatsApp" it will recommend you "Element" and other Free Software messengers. But if you write "Element" it will recommend you only Free Software messengers. "WhatsApp" will be excluded. It is done by referencing the "licenses" data-point.

API

When talking to an instance over the normal HTTP insert a /json/ between the domain name and the search request. So instead of domainmane.site/youtube do domainname.site/json/youtube and it will give you the same results but formatted as a json.

Adding new software

Do add software let's look at two examples from the apps folder:

This is the json for Blender.

{"names":["Blender"],
 "comment":"Blender is a Free Software 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.",
 "links":{"website":"https://www.blender.org/",
	  "git":"https://git.blender.org/gitweb/gitweb.cgi/blender.git",
	  "wikipedia":"https://en.wikipedia.org/wiki/Blender_(software)",
	  "documentation":"https://docs.blender.org/manual/en/latest/",
	  "icon":"https://download.blender.org/branding/square/blender_icon_64x64.png"},
 "licenses":["GPL-2.0-or-later"],
 "platforms":["GNU/Linux",
	      "Windows",
	      "MacOS",
	      "BSD",
	      "AmigaOS",
	      "Solaris"],
 "interface":["opengl"],
 "languages":["C"],
 "networks_read":[],
 "networks_write":[],
 "formats_read":["blend",
		 "dae",
		 "abc",
		 "usd",
		 "usdc",
		 "usda",
		 "svg",
		 "bvh",
		 "ply",
		 "stl",
		 "fbx",
		 "glb",
		 "obj",
		 "x3d",
		 "wrl"],
 "formats_write":["blend",
		  "dae",
		  "abc",
		  "usd",
		  "usdc",
		  "usda",
		  "svg",
		  "pdf",
		  "obj",
		  "ply",
		  "stl",
		  "fbx",
		  "glb",
		  "gltf",
		  "x3d"],
 "generic_name":["Text Editor",
		 "Video Editor",
		 "3D Modeling",
		 "3D Rigging",
		 "3D Animation",
		 "3D Rendering",
		 "Compositing",
		 "Motion Tracking"]}

Since it's Free Software it's important to give the users links to it's core things. Like the Website where they get a copy and learn more about it. Like the git ( or other version control ) repository of source code. Like the documentation.

Notice the icon datapoint. It links to download.blender.org. This way we give away some of the website's load to other websites. Usually Wikipedia has a lot of icons for a lot of software.

It's also very important to list at least the core file formats / networks that it supports. If you are adding something like Emacs or Gedit which are text editors that can edit text with any extension, please then list the text encoding that it supports. Like ASCII or UTF-8. Usually they are listed in Save or Open menus.

The idea here is not to document the software precisely. We are not making a Wikipedia. The idea is to compare features between software to give users a relevant replacement / alternative.

Also note the licenses. You should be careful. In the data folder there is a licenses list file. We use it to see if the license is Free or not. So please make sure you are using the correct formatting of the license's name. Use licenseId preferably.

Not let's look at a proprietary program YouTube:

{"names":["YouTube",
	  "You Tube",
	  "youtube.com",
	  "youtu.be"],
 "comment":"A platform for uploading and watching videos.",
 "links":{"website":"https://youtube.com",
	  "wikipedia":"https://en.wikipedia.org/wiki/YouTube",
	  "icon":"https://upload.wikimedia.org/wikipedia/commons/thumb/0/09/YouTube_full-color_icon_%282017%29.svg/120px-YouTube_full-color_icon_%282017%29.svg.png"},
 "platforms":["Android",
	      "iOS",
	      "Web"],
 "interface":["HTML5"],
 "languages":["JavaScript"],
 "networks_read":["youtube"],
 "networks_write":["youtube"],
 "formats_read":[],
 "formats_write":[],
 "generic_name":["Video Player",
		 "YouTube Client",
		 "Music Player",
		 "Publication"],
 "issues":["Surveillance",
	   "Non-Free Software",
	   "Non-Free JavaScript",
	   "DRM"]}

With surveillance software we try to avoid linking it's icon from the website itself. It should not even try to connect to the bad website. We don't know what they are doing with the server logs. So here it's very important to use Wikipedia. Alternatively you can host the logo yourself somewhere. Perhaps on LBRY. And use a spee.ch link to it.

Also notice the additional issues datapoint. It's important to have a list of Anti-Features. Try looking at F-droid.org for inspiration of this. Telegram, by the way, has Anti-Features even though it's Free Software. So we list them.

Again, remember, we are looking for similarities of data. Not documenting everything. Things like generic_name plays a big role in finding the replacements / alternatives. File formats and networks play a bit role too. If in photoshop.json it will have a generic name "Image Editor" and in gimp.json it will have "Editor of Images" it will fail to find the match. So please study the files before adding a new one.

It is quite important to fill as much as possible data about Non-Free Software too. Even though the data will never be shown to the user. Because we want to compare the features and the formats to find Competitors. And later other functions may be added that use such a data.

Contact info

We hang out on [matrix] in #freecompetitors:matrix.org