Используй только тот софт, который ты понимаешь, как он работает.
В такой формулировке мы естественным образом получаем те вещи, которые формально требует GPL, о которых говорят евангелисты free software, итп
Т.е. если мы юзаем условно Скайп, то пользователь в ходе обучения использованию Скайпа должен понять как устроено клиент-серверная пересылка данных, как в общих чертах работает end to end криптография, итп. И мочь соответственно примерно, на глазок, тыкнуть в кусок кода, который всё это делает
Но для этого нужно несколько вещей:
1) Код должен быть написан так, чтобы даже последний гуманитарий мог примерно почувствовать и быстро глазами увидеть, какой кусок для чего предназначен. Даже без знания этого языка программирования.
Т.е. как минимум писать всё нужно чисто и красиво, на языке который интуитивно понятен для чтения - например, Clojure или другой Lisp. (а вот для написания этот язык может быть вообще адским матаном, это уже неважно - программисты на то и созданы, чтобы страдать)
Плюс возможно, нужны инновации в UI/UX. Например, возможность быстро, прямо из интерфейса Скайпа, посмотреть код обработчика каждой кнопочки. Условно говоря, щелкаем средней кнопкой мыши по кнопке, и появляется редактор Github Atom с открытым кодом (который, в идеале, неплохо бы иметь возможность похачить прямо на месте).
2) Люди в массе своей (например, на основе программы средней школы) должны иметь понятийную базу, достаточную для понимания современных информационных технологий. Т.е. нужно учить этому едва ли не с детского сада. Всякие ненужные предметы типа географии и «религиозного образования» порезать вхлам, вместо них впилить информатику, информатику и еще раз информатику. Так, чтобы когда в восьмом классе школьник Вася сядет изучать Скайп, у него не было особых проблем с пониманием идеи шифрования.
Без этих вещей весь этот сказ про свободный софт - обычное лицемерие :)