Freenet, i2p, Java…

Не так давно, я скачивал и устанавливал систему Freenet. По некоторым причинам (больше время отклика, отсутствие динамического контента, низкая скорость загрузки, отсутствие нормального интерфейса, и т. д.) она удалена с моего компьютера, ибо на данный момент меня больше заинтересовал проект i2p (о том, что это такое, можно прочитать на вики, и на официальном сайте). Оба этих проекта объединяет то, что они OpenSource (который в последнее время всё больше и больше интересует меня), и то, что они написаны на Java. Меня заинтересовал этот язык, дело в том, что он очень похож на C# (а точнее, си-шарп похож на java, так как проектировался с оглядкой на него). А шарп я более-менее знаю, по крайней мере разрабатывал приложения контроля состояния распределённой сети серверов именно на нём. Но на данный момент у явы, как языка прикладного программирования приложений, есть огромное преимущество: он спокойно исполняется на линукс-системах. Т.е. исполняемый файл, в отличие от .NET exe, одинаково выглядит и работает на той же убунту, и на той же винде едва ли не любых версий. Это преимущество стало решающим в определении моего интереса к нему.

Чем же обеспечивается успех и живучесть Java в конкурентной борьбе с .NET? Тут надо сделать оговорку. Вообще, зависит от того, для какой платформы будет вестись разработка — для MS Windows, *Nix, или иных платформ. Если основным целевым сегментом является windows, то тут, безусловно, стоит выбирать .NET разработку, ибо она наилучшим образом интегрирована с системой, предоставляет массу платформо-зависимых инстументов, и писать на ней windows-приложения намного правильнее. Но у OpenSource проектов, как правило, целевые задачи совершенно другие. Зачастую приложения пишутся для бесплатного использования максимальным количеством пользователей (ибо от количества людей, у которых установлено то или иное приложение, зависит работоспособность сервиса, это и freenet, и i2p). И ввиду этого, привязывать к платформе приложение совершенно недопустимо. А поддержка .NET на той же линукс — практически отсутствует (да, я в курсе, что существует порт .NET на Linux, но я даже не проверял его работоспособность).

Единственной платформой, которая позволяет вести разработку для практически всех существующих операционных систем, обладает официальной поддержкой и довольно серьёзным финансированием, а как бонусы — имеет несколько открытых и бесплатных средств разработки (к примеру NetBeans IDE), является Java. Её разрабатывает компания Sun, которая, как можно видеть на их официальном сайте спонсирует и поддерживает также множество известных open source продуктов, среди которых MySQL, OpenOffice, NetBeans, Java… Ввиду этого, Java остаётся едва ли не единственным выбором для программиста, решившего написать прикладное приложение, и которое должно работать на многих платформах. За счёт чего это возможно? Дело в том, что Java-приложения исполняются не напрямую через вызов системных функций целевой системы (к примеру windows-API), а на промежуточном звене, так называемой «Java-машине). Условно, можно назвать это интерпретатором, а ещё точнее — JIT-компилятором. Исполняемый Java-файл не привязан к платформе, а состоит из так называемого «байт-кода», который исполняется на java-машине, которая, в свою очередь, переводит байт-код в исполняемые инструкции для процессора. Сама Java-машина уже привязана к платформе, т.е. машина для Linux не может быть запущена на windows, но прикладного программиста это не должно волновать. К слову, по быстродействию java-код, в настоящее время, не намного проигрывает чисто компилированным приложениям, за счёт применения JIT. Таким образом, лично для меня эти особенности стали поводом для знакомства с языком.

Также, если вас заинтересовала статья, рекомендую почитать ещё и вики: Java и сравнение Java и C#.

Для изучения же языка рекомендую вначале двухтомник Хорстмана и Корнелла «Java 2«, А затем трёхтомник Дейтела, «Технологии программирования на Java». Эти книги отличаются систематизированным изложением материала и по первому впечатлению вполне достойные представители технической литературы по Java. Единственный недостаток — цена бумажных версий, все книги обойдутся в сумму от 2,5 до 5 тысяч рублей. Но ведь мы в России живём, господа! :) И KAD с торрентами (1), (2), (3) ещё никто не отменял.

TOR, анонимность, или о том, зачем надо поднимать свой сервер.

Собственно, на днях поднял у себя на домашнем компьютере tor-сервер. Во-первых, интересно было, что из этого выйдет, во-вторых, я люблю всякие такие пакости :) На данный момент сервер настроен и работает. Если не знаете, что такое tor, то идите по официальной ссылке проекта, она находится в правой колонке сайта, рядом со ссылкой на truecrypt. В двух словах — тор, это система анонимизации и защиты своего траффика (передаваемых данных) от перехвата со стороны хакеров, не в меру любопытных соседей и спецслужб. Изначально тор создавался в расчёте на противника уровня государства, так что — эта система обладает достаточной устойчивостью.

В частности, я её использую для общения через ICQ. Я использую открытое ПО MirandaIM с плагином SecureIM, который обеспечивает шифрование сообщений пересылаемых по ICQ так, что расшифровать их может только тот, кому вы его послали. Через интернет они проходят в шифрованном виде. Также траффик аськи пущен через TOR, чем обеспечивается отсутствие возможности определения моего местоположения. Не то, чтобы я общался по аське о каких-то безмерно криминальных вещах, просто мне нравится осознавать, что сообщение читает только тот, кому оно предназначено. Ибо я крайний противник вмешательства в личную жизнь и какого-бы то ни было контроля за личной жизнью человека. Знаете, я безмерно не люблю чужие письма, а также не люблю тех, кто их читает. А так как читателей хватает и сегодня, я считаю, что нужно максимально затруднить им жизнь. Также система тор позволяет получить доступ к тем или иным сайтам, ресурсам и контенту, который запрещает ваш корпоративный админ, либо государство. Потому как тор-траффик теоретически не подконтролен какой-либо структуре.

Так вот, система основывается на людях, которые делятся своим траффиком. Вы открываете у себя на компьютере сервер, и делитесь своим траффиком с остальными. В данный момент мой сервер разрешает траффик IM-клиентов. Т.е. он может использоваться для анонимного общения. К слову, ещё пару месяцев назад, система управления тором — vidalia, совершенно не позволяла «нубу» настроить свой сервак. Почему? Да всё просто, она неверно делала UPnP настройку моего роутера, и ручное открытие портов — не помогало. Сейчас всё изменилось, сервер настраивается едва ли не двумя кнопками. На самом деле рекомендую к использованию эту систему. Также рекомендую поднять у себя дома сервер, так как это обеспечивает ещё большую анонимность вам: уже нельзя определить, то ли это кто-то вышел через ваш компьютер, то ли это вы сделали. Подробнее можно почитать тут: https://www.torproject.org/

Вообще, в настоящее время существует масса анонимизирующих систем, которые заняты обеспечением не только приватности сообщений, но и свободы слова в интернете. Как вы знаете, свобода слова понятие крайне иллюзорное. Скажем, в конституции многих стран прописано, что они уважают и поддерживают свободу слова. Но тут же — буквально в каком-нибудь кодексе или законе — накладывается масса ограничений на то, что можно говорить, а что говорить нельзя. Мне кажется, такой подход у человека способного к мышлению, вызывает рвотные позывы: потому как это называется двойным стандартом и нае-аловом. Потому анонимность в той или иной мере становится для многих людей единственным способом сказать что-либо, выразить своё мнение, и не выпасть, случайно, из окна, или не отравиться прошлогодними грибами. В конце концов, просто не сесть в тюрьму. Правда, у свободы слова есть и иная сторона — анонимность означает безнаказанность, и свободные сети забиваются всяким дерьмом, начиная от педофилии и заканчивая грызнёй между участниками, что, разумеется, не несёт никакой пользы обществу. Таким образом, идеология свободных сетей заключается в том, что информацию, к которой невозможно быть толерантным, следует игнорировать.

Список анонимных и распределённых сетей можно глянуть здесь.