Русский
Русский
English
Статистика
Реклама

Лицензирование

Перевод Встречайте Creative Commons Legal Database

14.12.2020 02:16:30 | Автор: admin

На днях состоялся запуск Creative Commons Legal Database одного из долгожданных проектов от Creative Commons, нацеленного на сбор и систематизацию информации, связанной с лицензиями Creative Commons (судебные дела и юридические статьи). Проект выглядит многообещающим (конечно, там есть судебная классика по опенсорсу Jacobsen v Katzer, правда, в очень сжатом виде), но пока не впечатляет своим объемом надеюсь, в скором времени там появится информация и по России, например. А пока предлагаю узнать про эту базу данных и сам проект в целом из статьи ниже.




Юридическая база данных Creative Commons Legal Database это подборка судебных прецедентов и юридической науки, которая поможет нашим пользователям узнать больше о правовых вопросах, связанных с лицензиями Creative Commons и юридическими инструментами. Эта информация была предоставлена многими преданными членами Creative Commons Global Network и юридической командой Creative Commons. Она опубликована на общедоступном бета-сайте, и мы работали над выпуском новой версии, чтобы, наконец, закончить проект как официальный продукт Creative Commons.


Что мы хотели улучшить на бета-сайте? Во-первых, мы хотели интегрировать словарь, систему дизайна Creative Commons, и таким образом, унифицировать внешний вид с другими сайтами и приложениями Creative Commons, проходящими тот же процесс. Во-вторых, администрирование информации юристами Creative Commons (рецензирование и публикация) было громоздким процессом, поэтому мы хотели переосмыслить его, обеспечив дружественный интерфейс администрирования.


Исследуйте новый сайт


Теперь вы можете получить доступ к обновленному сайту Creative Commons Legal Database и наслаждаться удобством работы с ним. Просмотрите ресурсы, которые призваны помочь вам понять применимость и прецеденты, установленные судами по всему миру в отношении лицензий Creative Commons, включая юридические исследования, обсуждающие лицензии Creative Commons и инструменты общественного достояния.


image


Домашняя страница Creative Commons Legal Database


image


Cписки судебных дел из Creative Commons Legal Database


В списках вы можете найти определенный контент по ключевым словам или фильтровать по темам, нажимая на теги. Смотрите подробную информацию, нажав на название дела или название статьи.


Вы также можете внести соответствующую информацию в базу данных на сайте проекта, который юридическая команда Creative Commons развернет в ближайшем будущем. Как только будет доступно, вы сможете отправить судебное решение или статью со ссылкой и другой основной информацией. Многие поля необязательны, но чем больше их вы заполните, тем лучше.


В случае сомнений проверьте раздел "Часто задаваемые вопросы" или свяжитесь с нашими юристами.


Кроме того, как упоминалось ранее, мы переосмыслили весь сайт, чтобы облегчить сотрудникам управление информацией. Хотя это не все могут видеть, мы надеемся, что автоматизация задач и более простой интерфейс помогут ускорить процесс предоставления дополнительной информации для общественности.


Что дальше?


Всегда есть место для улучшения. Для этого проекта есть ряд аспектов, где мы все еще можем улучшить технологический уровень:


  • Улучшить поиск в настоящее время функция поиска довольно ограничена по условиям, которые могут быть запрошены, а это значит, что если пользователи совершат ошибку (например, перепутают местами две буквы) то они, вероятно, не найдут того, что хотели. Кроме того, поиск можно улучшить, показав рекомендации, когда ничего не найдено.
  • Сделать таблицы сортируемыми по столбцам дайте пользователю больше возможностей для изучения и сканирования ресурсов. Было бы неплохо иметь функции, обеспечивающие большую интерактивность с данными.

Если вас интересует процесс, который потребовался для переосмысления сайта, есть ряд сообщений в блоге Open Source blog, которые освещают это.


Как я могу внести свою лепту?


Правовая база данных Creative Commons это проект с открытым исходным кодом, поэтому вклад сообщества приветствуется. Вы можете найти код в репозитории на Гитхабе и сообщить об ошибках или предложить новые функции. Пожалуйста, прочтите руководство по отправке контрибьютов перед их отправкой. У нас также есть канал в Slack для обсуждения специфики проекта, вы можете присоединиться к #cc-dev-legal-database, если желаете, мы будем ждать ваших ценных комментариев. И напоследок, пожалуйста, следите за анонсом от юридической команды Creative Commons, который будет включать в себя призыв делать контрибьюты.

Подробнее..

Как лицензируется и чем отличаются лицензии Elastic Stack (Elasticsearch)

05.11.2020 02:15:38 | Автор: admin
В этой статье расскажем как лицензируется Elastic Stack, какие бывают лицензии, что туда входит (ключевые возможности), немножечко сравним Elastic с OpenDistro от AWS и другими известными дистрибутивами.



Как видно на картинке выше, существует 5 типов, условно говоря, подписок, по которым можно пользоваться системой. Подробности по тому, что написано ниже, вы можете узнать на специальной странице Elastic. Всё написанное в этой статье применимо к Elastic Stack, размещаемому на собственной инфраструктуре (on-premise).

Open Source. Это версия Elastic Stack, которая находится в свободном доступе в репозитории Elastic на Github. В принципе, вы можете взять ее и сделать убийцу Arcsight, QRadar, Splunk и других прямых конкурентов Elastic. Платить за это ничего не нужно.

Basic. Этот тип лицензии включает в себя возможности предыдущей лицензии, но дополнен функционалом, который не имеет открытого кода, но, тем не менее, доступен на бесплатной основе. Это, например, SIEM, доступ к ролевой модели, некоторые виды визуализаций в Kibana, Index Lifecycle Management, некоторые встроенные интеграции и другие возможности.

На этом бесплатные лицензии закончились и пришло время разобраться с платными лицензиями. Elastic Stack лицензируется по количеству нод Elasticsearch. Рядом может стоять хоть миллион Kibana и Logstash (или Fluentd, если угодно), но лицензии будут считаться именно по хостам, на которых развернут Elasticsearch. В расчет лицензий также не входят ноды с ролями Ingest, Client/Coordinating. На попадающее в расчет количество нод напрямую влияет объем входящего трафика и требования к хранению данных. Напомним, что для обеспечения надежности работы кластера, в нем должно быть минимум 3 ноды. Мы проводим расчет сайзинга исходя из методики, которую описывали в одной из предыдущих статей. При покупке лицензий Elasticsearch доступен только формат подписки длительностью от 1 года с шагом в 1 год (2, 3 и так далее). Теперь вернемся к типам лицензий.

Gold. В лицензии Elasticsearch уровня Gold появляется поддержка авторизации через LDAP/AD, расширеное логирование для внутреннего аудита, расширяются возможности алертинга и техподдержка вендора в рабочие часы. Именно подписка уровня Gold очень похожа на AWS OpenDistro.

Platinum. Наиболее популярный тип подписки. кроме возможностей уровня Gold, тут появляется встроенное в Elastic машинное обучение, кросс-кластерная репликация, поддержка клиентов ODBC/JDBC, возможность гранулярного управления доступом до уровня документов, поддержка вендора 24/7/365 и некоторые другие возможности. Ещё в рамках этой подписки они могут выпускать Emergency patches.

Enterprise. Самый выскоий уровень подписки. Кроме всех возможностей уровня Platinum, сюда входят оркестратор Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, решение по безопасности для конечных устройств Endgame (со всеми его возможностями), поддержка вендором неограниченного количества проектов на базе Elastic и другие возможности. Обычно используется в крупных и очень крупных инсталляциях.

У Elastic появилось уже немало форков, самый известный из которых OpenDistro от AWS. Его ключевым преимуществом является поддержка некоторых возможностей оригинального Elastic, доступных на платных подписках. Основные это интеграция с LDAP/AD (а еще SAML, Kerberos и другими), встроенный алертинг (на бесплатном Elastic это реализуется через Elast Alert), логирование действий пользователей и поддержка JDBC-драйверов.

Упомянем также про HELK и Logz.io. Первый проект на Github, который обвешивает Elasticsearch дополнительным ПО для аналитики угроз (пишут, что пока это всё находится в альфе), а второй облачный сервис, основанный на Elastic и добавляющий некоторые приятные фичи. В комментариях можно поделиться другими форками, о которых вам известно.

Для получения дополнительной информации о сайзинге Elasticsearch, лицензировании и по другим вопросам, вы можете оставить заявку в форме обратной связи на сайте или другим удобным способом.

А ещё можно почитать:

Сайзинг Elasticsearch

Разбираемся с Machine Learning в Elastic Stack (он же Elasticsearch, он же ELK)

Elastic под замком: включаем опции безопасности кластера Elasticsearch для доступа изнутри и снаружи

Что полезного можно вытащить из логов рабочей станции на базе ОС Windows
Подробнее..

Из песочницы Данная ситуация выходит за рамки наших компетенций как быстро и просто остаться без ESD ключей

13.11.2020 04:15:27 | Автор: admin
ESD лицензия это отличный выбор для быстрой покупки подлинного программного обеспечения: оплатили счёт через пару часов получили заветный подлинный ключ. Но даже если вы покупаете её у официального реселлера компании Microsoft, это вовсе не гарантирует, что вы можете использовать ваш ключ тогда, когда вы этого захотите, даже если вы не нарушаете условий лицензионного соглашения. Подробнее под кат.

Наша компания занимается IT аутсорсингом предприятий. Год назад мы взяли на обслуживание одну производственную компанию, которая только что отказалась от услуг другой организации. По рассказам работников это расставание прошло не очень хорошо, были взаимные недопонимания и упрёки, тем не менее, с поставщиком рассчитались, нерешённых вопросов не осталось. Важно отметить, что предыдущая организация также являлась поставщиком оборудования и программного обеспечение, что весьма удобно.

Когда стали проводить аудит хозяйства, которое досталось нам на обслуживание, мы обратили внимание, что работники тщательно следили за лицензиями: была целая папка со всеми ключами / подписками / документами, подтверждающими право владения. Редкий случай, но тем не менее, нам это показалось большим плюсом.

Крупных инцидентов с оборудованием за время обслуживания не происходило до недавнего времени, когда потребовалось переустановить ОС на одном из компьютеров. ОС установили, ввели ESD ключ для Windows система активировалась. Установили Office 2016 Home and Business, ввели ESD ключ для Office и вот тут началось самое интересное. Мы увидели сообщение Ключ уже использован, выполните вход в учётную запись Microsoft. Ещё раз перепроверили все символы, убедились в том, что это постоянная лицензия, а не подписка. Решили войти в учётную запись MS. Перепробовав все возможные для этого действия адреса почтовых ящиков стало понятно, что учётной записи MS у организации нет.

Далее с помощью чата технической поддержки MS и специалиста по имени Jai мы решили выяснить, каким же образом был активирован Office в первый раз, если учётной записи у клиента нет. Мы предоставили ключ и возможные адреса e-mail, к которым мог быть привязан наш ключ. ВУАЛЯ! Стало понятно, что поставщик привязал проданный организации ключ к своему личному аккаунту MS. И чтобы воспользоваться Office снова, надо на целевом ПК просто войти в его учётную запись.

image

Мы связались с этим поставщиком, на что получили ожидаемый ответ, что если что-то хотите, можем за деньги приехать и сделать. А именно, войти в свою учётную запись. И это придётся делать каждый раз, когда нам потребуется переустановить Office с помощью ESD ключей, так как весь Office ESD был куплен у одного поставщика.

Руководство организации было в лёгком замешательстве, ведь ESD ключи куплены, есть все необходимые документы, но использовать эти ключи нельзя без личного оплачиваемого визита поставщика. Все участвующие в этой истории люди понимали, что это неудачное стечение обстоятельств. Поставщик и аутсорсер были одним лицом и он решил не усложнять себе жизнь созданием учётной записи для организации, а просто активировал лицензию на своей учётке. А проконтролировать правильность этих действий на стороне организации никто не мог.

В чате ТП нам помочь не смогли, так как не обладают компетенциями в этом вопросе, и дали ссылку на созданный инцидент, предложив продолжить общение через e-mail.

После нескольких писем стало понятно, что никто на этом свете не может решить проблему с переносом ключей с одной учётной записи на другую. Вот основные выдержки из писем MS (я убрал множественные извинения за предоставленные неудобства):

Письмо 1
При проверке учетной записи XXXX@XXXX.ru (прим. почта поставщика) не было выявлено препятствий по ее использованию. Для нее действительно активирована упомянутая лицензия. Обращаем Ваше внимание, что в данном случае не представляется возможным перенести лицензию на другой аккаунт, поскольку ключ продукта привязан к конкретной учетной записи, и она функциональна.

Письмо 2
Исходя из информации в Вашем письме, закономерным решением является связаться с партнером по месту приобретения лицензии на основании официального договора. Как Вы правильно заметили, ключ продукта привязан к конкретной учетной записи и к ней должен быть доступ. Со своей стороны, мы не имеем права предоставлять рекомендации по восстановлению доступа к аккаунту, поскольку он принадлежит другому пользователю.

Письмо 3
Мы всегда на стороне клиентов, но данная ситуация выходит за рамки наших компетенций, поэтому рекомендовали обратиться в соответствующую службу поддержки со страницы support.microsoft.com/ru-ru/contactus или support.microsoft.com, используя шаги из предыдущих писем.
Благодарим за понимание.

Как вы понимаете, нас отправили обратно на страницу ТП, из которой нас ранее отправили на общение по e-mail.

Что мы имеем в сухом остатке


  • Ключи ESD куплены, но воспользоваться ими нельзя.
  • Поставщик предлагает за деньги активировать уже купленный Office, потому что сделать это без него специалисты компании не могут.
  • Сам поставщик не имеет технической возможности отвязать от своей учётной записи ключи. Или он может просто не хотеть этого делать, даже если бы возможность была.
  • Компания Microsoft тоже не имеет возможности перенести ключи из одной учётной записи в другую.

Особо важно отметить, что в этой ситуации никто кроме конечных покупателей, купивших подлинный продукт, не оказался в минусе. Поставщик (являющийся официальным ресселером официального дистрибьютора в России 1С-Гендальф) продолжает продавать лицензии.

Но если действия поставщика ещё можно списать на какие-то человеческие факторы, то удручает тот факт, что Microsoft не только не может / не хочет применять какие-то меры по отношению к недобросовестным поставщикам, которые портят им репутацию, но и не может решить техническую проблему (перенос ключей) на своей стороне.

Будьте внимательны с ESD лицензиями и выбором поставщиков!
Подробнее..

Защита программного обеспечения от обратной инженерии

20.12.2020 20:21:03 | Автор: admin

В данной статье мы представим себя в роли разработчика лицензированного ПО и рассмотрим способы защиты от взлома нашей программы пиратами.

Введение

Мы будем рассматривать методы защиты программного обеспечения, написанного на компилируемом языке, от реверс-инжиниринга, пиратства и внедрения стороннего вредоносного ПО. Изложенная информация актуальна, поскольку одной из целей любого проприетарного проекта является лицензировать и контролировать распространение данного программного обеспечения. Практически все программы, требующие наличие лицензии подвергаются попыткам взлома и многие из них на данное время имеют пиратски аналоги. Далее для простоты взломанную программу будем называть крякнутой, а процесс взлома кряком (англ. crack).

В данной статье мы представим себя в роли разработчика лицензионного программного обеспечения на С++ и будем анализировать какие методы защиты следует использовать, чтобы усложнить процесс кряка нашей программы. Следует понимать, что любая программа может быть в конечном итоге взломана, а абсолютной защиты не существует, целью является сделать реверс инжиниринг наиболее сложным и время, требуемое на взлом программы больше, чем время между обновлениями нашего вымышленного ПО.

Общие сведения

Пиратство программного обеспечения является одной из основных проблем для разработчиков. Для защиты ПО от незаконного распространения недостаточно лицензии, необходимо защитить программу от обратного инжиниринга. Существуют сотни способов защиты программы, однако все они также имеют свой обход. Предположим, что мы хотим написать проприетарную программу на компилируемом языке С++ под операционную систему Windows, мы её лицензируем и будем продавать копии. Рассмотрим, как же нам необходимо поступить, чтобы единственным способом получения нашего ПО была покупка его лицензии у разработчика.

Разработанное на С++ ПО будет собрано в исполняемый файл, который и будет продаваться конечному пользователю. Во избежание его дальнейшего незаконного распространения в первую очередь нам необходимо встроить проверку лицензии в наш код: при запуске программы будет проверяться наличие лицензии у данного пользователя. Часть кода, которая занимается проверкой лицензии будем называть протектором. Оптимально чтобы протектор проверял наличие лицензии у пользователя через интернет. В таком случае если пользователь, который купил нашу программу передаст её другому, протектор не обнаружит лицензию и попросит приобрести ПО, либо просто завершит процесс.

Реверс инжиниринг

В случае, если мы проверяем наличие лицензии через интернет, подделать её практически невозможно, однако стоит понимать, что программа вместе с протектором находится на компьютере пользователя. Это значит, что для человека, владеющего отладчиком и умеющего редактировать ассемблерный код, не составит никакого труда просто удалить протектор из программы или сделать так, чтобы проверка лицензирования работала неправильно и всегда думала, что программа лицензионная. Анализ работы бинарного кода и внесение в него изменений без наличия исходников называется обратной инженерией (англ. reverse engineering). Декомпиляция ассемблерного кода обратно в код на С или С++ невозможна, однако возможно получить дизассемблер текстовое представление машинного кода. Несмотря на то, что чтение такого кода достаточно сложно, для реверс-инженера этого вполне достаточно, чтобы найти протектор. Рассмотрим способы защититься от обратной инженерии.

Методы защиты от реверса

Существуют множество методов защиты от кряка. Я перечислю наиболее эффективные современные методы защиты, а далее в статье мы рассмотрим каждый из них подробнее:

  • Создание зависимостей между протектором и основным кодом

  • Защита от отладки программы и изменения ассемблерного кода

  • Обфускация (мутация) нативного кода

  • Виртуализация нативного кода

Нативным кодом будем называть код, исполняемый напрямую на процессоре (т. е. то, что мы получаем после компиляции нашего кода под целевую архитектуру). Отладчик в нашем случае программа для пошагового обхода и изучения работы ассемблерного кода, позволяющая увидеть значения всех переменный в процессе исполнения и последовательность выполнения кода.

Создание зависимостей

Как только мы добавили проверку лицензии в нашу программу, пирату достаточно было лишь удалить её из ассемблерного кода, и он получал версию программы, работающую без лицензии.

Необходимо написать ПО так, чтобы от наличия протектора зависела дальнейшая работа. Один из наиболее очевидных способов это добавление зависимостей между протектором и функциональной частью. Например, инициализация важных значений и объектов, используемых далее. При этом значения будут зависеть от лицензионного ключа или будут получены через интернет при проверке лицензии.

Теперь реверс инженер не может просто так удалить протектор, так как это приведет к дальнейшей неправильной работе или крашу в программе. Но ПО всё еще плохо защищено, так как под отладчиком можно легко сломать проверку лицензирования в протекторе или, анализируя сам протектор, получить необходимые для программы значения и инициализировать их в обход защиты.

Защита от отладчика

Теперь нам необходимо защитить наш код от отладки. С этого момента кроме лицензирования и инициализации наш протектор будет ловить отладчик. Если протектор обнаружит следы отладчика, то он ломает стек фреймы программы или как-либо иначе делает восстановление работы программы невозможным.

Первое, что нам необходимо сделать, это запускать протектор в другом потоке. Регистр DR7 debug control register, может сигнализировать о том, что приложение запущено под отладчиком. Также можно проверять значения регистров, используемых при отладке, таких как DR0 DR3. Есть множество возможностей обойти эту защиту, но её реализация в протекторе не будет лишней.

Второй способ детектирования отладчика подписаться на хуки ОС windows, которые будут вызывать переопределенную нами функцию при попытке прикрепить к процессу отладчик или изменить наш нативный код. Например, можем использовать хук DbgUiRemoteBreakin(), который вызовется, когда к процессу прикрепится отладчик, сообщив нам об этом. Данный метод не сработает, если реверс-инженер запустит наш процесс изначально под отладчиком. В таком случае во время вызова хука протектор еще не будет запущен, а значит и словить его не сможет. Для комплексной защиты используют большое количество различных хуков.

Третий способ создания ситуаций, не влияющих на работу ПО, но вызывающие действия в отладчике. Например, мы можем выбросить исключение, сразу-же его обработать и замерить время между выбросом и обработкой. Исключение в отладчике может вызвать остановку, после чего, обработав исключение, по времени протектор поймет, что программа работает под отладчиком.

Четвертый способ воспользоваться интерфейсом ОС. В windows API есть множество функций, позволяющих узнать о наличии отладчика, прикрепленного к программе. Можно использовать такие функции, как:

  • IsDebuggerPresent() активен ли отладчик

  • CheckRemoteDebuggerPresent() удаленный отладчик

  • NtQueryInformationProcess() получает информацию о процессе

  • RtlQueryProcessHeapInformation() получает флаги кучи процесса

  • RtlQueryProcessDebugInformation() получает флаги отладчика процесса

  • NtQuerySystemInformation() получает информацию из системы

Полученная информация позволит определить наличие отладчика в системе.

Обфускация нативного кода

Описанные выше методы очень сильно усложнят запуск кода под отладчиком. Реверс-инженеру придется обходить каждый из способов защиты по-отдельности, но спустя некоторое время пирату удастся запустить наше приложение под отладчиком, тогда наш код снова будет уязвим для кряка. Необходимо сам ассемблерный код защитить от анализа. Для этого подойдет обфускация. Обфускация приведение кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. Обфусцировать можно как уже скомпилированную программу, так и исходный код, что достаточно актуально для скриптовых языков.

В нашем случае мы будем обфусцировать ассемблерный код. Такую обфускацию называют мутацией нативного кода. Для обфускации кода используют специальные программы обфускаторы. Данный метод защиты создает лишние инструкции, запутывает, добавляет ложные зависимости в коде, тем самым делая код сложнее для анализа и реверса, однако это замедляет программу. Чтобы не сильно влиять на работу ПО мы будем обфусцировать только наш протектор. Поскольку он связан со работой ПО, реверс-инженеру придется разбираться в работе мутированного кода протектора. Мутация одного лишь протектора незначительно повлияет на производительность всей программы, но значительно усилит безопасность. Для большей безопасности можно обфусцировать уже мутированный код протектора повторно.

Несмотря на все, даже такой код подвержен анализу опытных ревёрсеров. Перейдем к еще более мощному механизму защиты кода

Виртуализация нативного кода

Более надежной альтернативой мутации является виртуализация. При виртуализации мы исполняем наш код не напрямую на процессоре, а имеем уникальную виртуальную машину, исполняющую защищенный участок кода. В нашем проекте мы воспользуемся данным методом защиты вместо обычной обфускации. Для этого нам придется купить программное обеспечение VMProtect или Themida. Принцип работы его следующий: наш нативный код протектора транслируется в байткод и для него создается уникальная виртуальная машина. Пользователь получает виртуальную машину с байткодом внутри. При запуске программы пользователем, протектор запускается через виртуальную машину. Данный способ защиты снижает производительность в тысячи раз, но поскольку протектор это лишь малая часть ПО, общее снижение производительности все еще незначительно.

Заключение

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

Подробнее..

Лучше 1С может быть только 1С Базуха

09.06.2021 12:21:23 | Автор: admin

Я уже ранееписал о том, что придумал движок, который позволяет работать с не 1С SQL-базой из клиентов, которыми являются базовые конфигурации 1С:Деньги. Думаю, это классное решение для небольших частных или малотиражных конфигураций! Я назвал его Базовый Учет или Базуха (Базовый Учет Хозяйства).

Решение дешево. 1С:Деньги на каждое рабочее место обойдется в 300 рублей. Сравните с лицензией на 1С, которая стоит 13.000 рублей + 5.000 рублей за каждое дополнительное место.

Так, например, лицензия на 10 пользователей для Базухи обойдется в 3.000 рублей, а для 1С в 28.000 рублей, т.е. по 2.800 рублей на каждого пользователя! Экономия в 10 раз!

Решениелучше чем 1С по производительности в эконом-сегменте. В дешевых 1С используется файловая база, которая работает медленно, т.к. нет посредника в виде SQL-сервера, который обеспечивает быстрое извлечение данных.

Чтобы получить сервер SQL, нужно заплатить достаточно большую сумму. Сервер 1С на 5 подключений стоит 14.000, а на большее количество подключений 86.400 (32-разрядный сервер за 50.400 не рассматриваем, его покупка не имеет смысла). Поэтому в нашем примере на 10 пользователей для нормальной производительности стоимость одного рабочего места уже получается 11.440 (учтена стоимость лицензии на сервер 1С).

Почему-то 1С не предлагает решения, где не используется сервер 1С, а используется только SQL-сервер. Базуха как раз использует такой подход. Он медленнее, чем трехзвенка с сервером 1С (потому что нельзя исполнять код на сервере), но быстрее, чем файловая база 1С (потому что можно исполнять SQL-запросы).

Однако,справедливости ради, следует сказать, что если многопользовательский доступ к файловой базе будет реализован через веб-сервер, то производительность будет сопоставима с Базухой. Веб-сервер является как бы сервером приложений, но у Базухи есть SQL-сервер. Так что сопоставимо. Причем Базуха лучше масштабируется на количество пользователей больше 10, а файловая даже через веб-сервер начинает на таких масштабах задыхаться, т.к. у нее нет SQL-сервера.

Решениеиспользует код и архитектуру 1С. Это важно, потому что поддерживать его может любой программист 1С, потратив буквально пару часов на освоение документации по платформе Базухи. Кроме того, можно использовать все выразительные средства 1С в разработке таблицы значений, МХЛ-файлы, богатые средства 1С для интеграции. Да и пользователю привычен знакомый интерфейс 1с.

Решениеболее свободно чем 1С. Для разработки можно использовать любые модели данных, а не только придуманные 1С прикладные объекты (регистры, планы счетов, планы обмена и т.п.). Можно использовать свои инструменты для разработки, можно делать абстракции кода, выполняя не код, а схемы кода, собственные иерархии данных.

Решение может служитьмостиком от 1С к другим средствам разработки. Учитывая открытость архитектуры базы данных и кода Базухи, со временем можно написать движок, который будет работать с базами Базухи абсолютно свободно, без 1С. В этом смысле Базуха является переходной программой, которая позволяет упростить этот процесс, потому что сейчас подходящего инструмента разработки, увы, нет.

Для кого предназначена Базуха?

Понятно, что конфигурация только начинается, поэтому не может конкурировать с такими монстрами, как УТ, БП, ERP, в которых вложено много труда и ресурсов. Но она и не предназначена для этого. Известно, что 1С предлагает максимально быстрый и удобный инструмент для разработки приложений баз данных. Но, к сожалению, лицензионная политика не позволяет его использовать для мелких, небольших решений.

Базуха закрывает этот вопрос и позволяет реализовывать небольшие заказные или малотиражные решения.

1С тоже позволяет делать недорогие тиражные решения, но для этого нужно предоставить решение самой 1С, она проверит его на 1С:Совместимо и если посчитает невыгодным распространение этой конфигурации, не выдаст базовую лицензию. Кроме того, такое мероприятие затратно по ресурсам.

С помощью Базухи вы можете выпустить недорогое тиражное решение буквально для нескольких клиентов, не прибегая к посредничеству 1С.

Также на Базухе очень удобно писать интернет-магазин, который одновременно является и учетной базой. Потому что все это крутится на одном MySQL сервере в интернете.

Лицензионная чистота

Для выяснения лицензионной чистоты решения я обратился в 1С-франчайзи Первый Бит. Сперва они не поняли, о чем я веду речь, но после телефонного общения с техническим специалистом вынесли вердикт: Что не запрещено, то разрешено. При этом уточнили, что их ответ является ответом, выражающим политику 1С.

Но на всякий случай я обратился и в 1С (lic@1c.ru). Там тоже не нашли возражений против моей схемы, после долгих и муторных споров со стороны 1С было вынесено решение:

С одной стороны, при популяризации решения оно будет выступать как конкурент 1С. С другой будет занимать нишу, куда 1С не пробиться с ее текущей стоимостью лицензий на нишу мелких производительных решений.Будем надеяться на благоразумие 1С!

В конечном итоге, появление подобного решения вызвано именно неповоротливостью маркетинга и невозможностью создавать дешевые малотиражные решения.

Вот текст лицензии на базовые версии 1С:

Как устроена Базуха?

Каждому пользователю устанавливается базовая программа 1С:Деньги.

В базе пользователя администратором запускается обработка, которая подготавливает базу к начальному запуску:

  1. Создает два пользователя admin (с паролем) и user (без пароля). admin имеет административные права, user полные.

  2. Из специального настроечного файла в базу пользователя заносятся пароль администратора, логин и пароль доступа к SQL-базе, тип SQL-базы.

  3. Добавляет основную обработку по работе с SQL базой данных.

  4. Выполняет первоначальную синхронизацию с SQL базой данных.

  5. Прописывает на рабочий стол ярлык для запуска 1С:Деньги под пользователем user с открытием списка дополнительных внешних обработок.

Окно запуска 1С:Базухи для пользователя выглядит так:

К сожалению, сразу открыть обработку Рабочий стол не получится технически, поэтому пользователь должен запускать ее вручную кликом.

При запуске обработки Рабочий стол пользователь вводит логин и пароль для доступа к SQL-базе. И начинает работу в этой базе добавляет/изменяет/просматривает данные и отчеты.

Код представляет собой совокупность обработок, хранящихся в SQL-базе. Каждая обработка имеет свою версию. Если версия обработки меньше, чем версия обработки в базе данных, она обновляется в локальную базу из SQL-базы.

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

Формы элемента рисуются в обычном конфигураторе 1С. Соответствие данных прописывается кодом. Соответственно, система знает, какие данные из каких полей отображать в полях.

Формы списка не поддерживают динамическое считывание данных, считывают данные порциями, постранично.

Отчеты выглядят как типовые 1С-отчеты, можно использовать даже систему компоновки данных (СКД).

Печатные формы документов программируются также на 1С и выводятся в табличные документы MXL.

Модули объектов (справочников и документов) хранятся в дополнительных обработках.

Особенности реализации Базухи

Для вопросовбезопасностиважно, чтобы в базе-носителя у пользователя не было лишних доступов, чтобы он не мог менять код. Несмотря на то, что у пользователя User полные права, он не может отлаживать код и менять код дополнительных внешних обработок. В этоп плане SQL база данных защищена от несанкционированного доступа.

Для вопросовбыстродействияважно, чтобы COM-соединение с SQL-базой данных было постоянно открыто. 1С:Деньги запускаются в режиме толстого клиента, при этом в серверном коде внешних обработок становятся доступными переменные приложения, т.к. можно постоянно хранить соединение с SQL-базой данных, а не создавать его каждый раз, что увеличивает скорость запросов к SQL-базе. Кроме того, это позволяет кэшировать дополнительные обработки, где хранится код приложения.

В качествесерверапланируется использовать любой SQL-сервер, желательно бесплатный. В начале My-SQL, потому что его проще приобрести пользователю (обычно предоставляются при покупке хостинга). И администрировать его практически не нужно. Далее, можно посмотреть в сторону Postgree.

Подробнее..
Категории: Sql , , Лицензирование

Исследование возможных заимствований и нарушений условий лицензирования в Java-коде на GitHub

13.11.2020 20:09:06 | Автор: admin
Меня зовут Ярослав Голубев, я работаю в JetBrains Research, в лаборатории методов машинного обучения в программной инженерии. Некоторые мои коллеги уже писали здесь о своих проектах (например, о подсказках для онлайн-курсов). Общая цель нашей группы сделать работу программистов проще, удобнее и эффективнее, используя данные о том, что и как люди программируют. Однако процесс создания программных продуктов состоит не только из написания кода есть еще документация, комментарии, рабочие обсуждения и многое другое и со всем этим людям тоже можно и нужно помогать.

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

Любая помощь людям начинается с исследования сложившейся ситуации во-первых, сбор данных необходим для возможности дальнейшей автоматизации, а во-вторых, их анализ позволит нам узнать, что именно люди делают не так. В этой статье я опишу именно такое исследование: познакомлю вас с основными видами лицензий ПО (а также несколькими редкими, но примечательными), расскажу об анализе кода и поиске заимствований в большом объеме данных и дам советы о том, как правильно обращаться с лицензиями в коде и не допускать распространенных ошибок.

Введение в лицензирование кода


В интернете, и даже на Хабре, уже есть подробные описания лицензий, так что мы ограничимся лишь кратким обзором темы, необходимым для понимания сути исследования.

Мы с вами будем говорить только о лицензировании открытого (open-source) программного обеспечения. Во-первых, это связано с тем, что именно в такой парадигме мы можем легко найти много доступных данных, а во-вторых, сам термин открытое ПО способен ввести в заблуждение. Когда вы скачиваете и устанавливаете обычную проприетарную программу с сайта компании, вас просят согласиться с условиями лицензии. Разумеется, вы их обычно не читаете, но в целом понимаете, что это чья-то интеллектуальная собственность. В то же время, когда разработчики заходят в проект на GitHub и видят все исходные файлы, отношение к ним совсем другое: да, какая-то лицензия там есть, но она же открытая, и программное обеспечение это открытое, значит, можно просто брать и делать что хочешь, так? К сожалению, не все так просто.

Как же устроено лицензирование? Начнем с самого общего деления прав:



Если идти справа налево, то первой будет коммерческая тайна, за ней проприетарные лицензии их мы рассматривать не будем. В сфере открытого программного обеспечения можно выделить три категории (по степени увеличения свобод): ограничивающие лицензии (копилефтные), неограничивающие лицензии (разрешительные, пермиссивные) и общественное достояние (которое не является лицензией, но является способом предоставления прав). Чтобы понять разницу между ними, полезно знать, зачем они вообще появились. Понятие общественного достояния старо как мир создатель полностью отказывается от любых прав и позволяет делать со своим продуктом что угодно. Однако, как ни странно, из этой свободы рождается несвобода ведь другой человек может взять такое творение, чуть изменить его и делать с ним что угодно в том числе сделать закрытым и продать. Копилефтные лицензии открытого программного обеспечения были созданы, именно чтобы защитить свободу по их положению на картинке видно, что они призваны поддерживать баланс: разрешать использовать, изменять и распространять продукт, но не запирать его, оставлять свободным. Кроме того, даже если автор не против сценария с закрытием и продажей, понятия общественного достояния в разных странах отличаются и поэтому могут создать юридические сложности. Чтобы их избежать, используются простые разрешительные лицензии.

Так в чем же различие между разрешительными и копилефтными лицензиями? Как и все в нашей теме, этот вопрос достаточно специфический, и здесь есть исключения, но если упростить, то разрешительные лицензии не накладывают ограничений на лицензию измененного продукта. То есть можно взять такой продукт, изменить его и выложить в проект под другой лицензией даже проприетарной. Главным отличием от общественного достояния тут чаще всего является обязательство сохранять авторство и упоминание оригинального автора. Наиболее известными разрешительными лицензиями являются лицензии MIT, BSD и Apache. Многие исследования указывают MIT как наиболее распространенную лицензию открытого программного обеспечения вообще, а также отмечают значительный рост популярности лицензии Apache-2.0 с момента ее создания в 2004 году (например, исследование для Java).

Копилефтные лицензии чаще всего накладывают ограничения на распространение и модификацию побочных продуктов вы получаете продукт, имея определенные права, и обязаны запустить его дальше, предоставляя всем пользователям такие же права. Обычно это означает обязательство распространять программное обеспечение в рамках той же лицензии и предоставлять доступ к исходному коду. На основе такой философии Ричард Столлман создал первую и самую популярную копилефтную лицензию GNU General Public License (GPL). Именно она обеспечивает максимальную защиту свободы для будущих пользователей и разработчиков. Рекомендую почитать историю движения Ричарда Столлмана за свободное программное обеспечение, это очень интересно.

С копилефтными лицензиями есть одна сложность их традиционно делят на сильный и слабый копилефт. Сильный копилефт представляет собой ровно то, что описано выше, в то время как слабый копилефт предоставляет различные послабления и исключения для разработчиков. Наиболее известный пример такой лицензии GNU Lesser General Public License (LGPL): так же как и ее старшая версия, она разрешает изменять и распространять код только при условии сохранения данной лицензии, однако при динамическом линковании (использовании ее как библиотеки в приложении) это требование можно не выполнять. Иными словами, если вы хотите позаимствовать отсюда исходный код или что-то поменять соблюдайте копилефт, но если хотите просто использовать как динамически подключаемую библиотеку можете делать это где угодно.

Теперь, когда мы разобрались в самих лицензиях, следует поговорить об их совместимости, ведь именно в ней (а вернее, ее отсутствии) кроются нарушения, которые мы хотим предотвратить. Каждый, кто когда-нибудь интересовался данной темой, должен был встречать схемы совместимости лицензий, похожие на эту:



От одного взгляда на такую схему может пропасть всякое желание разбираться в лицензиях. Действительно, лицензий открытого программного обеспечения много, достаточно исчерпывающий список можно найти, например, тут. В то же время, как вы увидите ниже в результатах нашего исследования, знать нужно весьма ограниченное количество (из-за их экстремально неравномерного распределения), а правил, которые нужно помнить для того, чтобы соблюдать все их условия, и того меньше. Общий вектор этой схемы довольно прост: в истоке всего стоит общественное достояние, за ним разрешительные лицензии, потом слабый копилефт, и, наконец, сильный копилефт, и лицензии совместимы вправо: в копилефтном проекте можно переиспользовать код под разрешительной лицензией, но не наоборот все логично.

Тут может возникнуть вопрос: а что, если у кода нет лицензии? Каким правилам следовать тогда? Такой код можно копировать? На самом деле это очень важный вопрос. Наверное, если код написан на заборе, то его можно считать общественным достоянием, а если он написан на бумаге в бутылке, которую прибило к необитаемому острову (без копирайта), то его можно просто брать и использовать. Когда же дело касается больших и устоявшихся платформ, таких как GitHub или StackOverflow, все не так просто, потому что, просто пользуясь ими, вы автоматически соглашаетесь с их условиями использования. Пока просто оставим об этом заметку в голове и вернемся к этому позже в конце концов, быть может, это редкость и кода без лицензии практически не бывает?

Постановка задачи и методология


Итак, теперь, когда мы знаем значение всех терминов, давайте точно сформулируем, что мы хотим узнать.

  • Насколько распространено копирование кода в открытом программном обеспечении? Много ли среди открытых проектов клонов в коде?
  • Под какими лицензиями существуют файлы? Какие лицензии наиболее распространены? Бывает ли в файле сразу несколько лицензий?
  • Какие возможные заимствования, то есть переходы кода из одной лицензии в другую, встречаются чаще всего?
  • Какие возможные нарушения, то есть переходы кода, запрещенные условиями оригинальной или принимающей лицензии, наиболее распространены?
  • Каково возможное происхождение отдельных фрагментов кода? Какова вероятность, что данный фрагмент кода был скопирован с нарушением?

Чтобы провести такой анализ, нам необходимо:

  1. Собрать датасет из большого количества открытых проектов.
  2. Найти среди них клоны фрагментов кода.
  3. Определить те клоны, которые действительно могут являться заимствованиями.
  4. Для каждого фрагмента кода определить два параметра его лицензию и время его последней модификации, которое необходимо, чтобы узнать, какой фрагмент в паре клонов старше, а какой младше, и следовательно кто мог потенциально скопировать у кого.
  5. Определить, какие возможные переходы между лицензиями являются разрешенными, а какие нет.
  6. Проанализировать все полученные данные, чтобы ответить на вышепоставленные вопросы.

Теперь разберем каждый шаг подробнее.

Сбор данных


Для нас очень удобно, что в наше время легко получить доступ к большому количеству открытого кода с помощью GitHub. Там есть не только сам код, но и история его изменений, что очень важно для данного исследования: чтобы выяснить, кто у кого мог скопировать код, необходимо знать, когда каждый фрагмент был добавлен в проект.

Для сбора данных нужно определиться с исследуемым языком программирования. Дело в том, что клоны ищутся в рамках одного языка программирования: говоря о нарушении лицензирования, сложнее оценить переписывание существующего алгоритма на другой язык. Такие сложные концепции защищаются патентами, в то время как в рамках нашего исследования мы говорим про более типичные копирование и модификацию. Мы выбрали язык Java, так как это один из самых широко используемых языков, который особенно популярен в коммерческой разработке ПО в этом случае потенциальные нарушения лицензирования особенно важны.

За основу мы взяли существующий Public Git Archive, в начале 2018 года собравший воедино все проекты на GitHub, у которых было более 50 звездочек. Мы отобрали все проекты, в которых есть хотя бы одна строчка на Java и скачали их с полной историей изменений. После фильтрации проектов, которые переехали или более недоступны, получилось 23 378 проектов, занимающих примерно 1,25 ТБ места на жестком диске.

Дополнительно для каждого проекта мы выгрузили список форков и нашли пары форков внутри нашего датасета это необходимо для дальнейшей фильтрации, так как клоны между форками нас не интересуют. Всего проектов, имеющих форки внутри датасета, оказалось 324 штук.

Поиск клонов


Для поиска клонов, то есть похожих кусков кода, тоже необходимо принять некоторые решения. Во-первых, нужно определиться, насколько и в каком качестве нам интересен похожий код. Традиционно выделяют 4 типа клонов (от самых точных до наименее точных):

  • Идентичные клоны это абсолютно одинаковые фрагменты кода, которые могут отличаться только стилистическими решениями, такими как отступы, пустые строки и комментарии.
  • Переименованные клоны включают в себя первый тип, но могут дополнительно отличаться именами переменных и объектов.
  • Близкие клоны включают в себя все вышеописанное, но могут содержать более значительные изменения, такие как добавление, удаление или перемещение выражений, при которых фрагменты все еще остаются похожими.
  • Наконец, семантические клоны это фрагменты кода, реализующие один и тот же функционал (имеющий одинаковую семантику), но отличающиеся в реализации (синтаксически).

Нас интересует именно копирование и модификация, поэтому мы рассматриваем только клоны первых трех типов.

Второе важное решение заключается в том, какого размера искать клоны. Одинаковые фрагменты кода можно искать среди файлов, классов, методов, отдельных выражений В нашей работе мы взяли за основу метод, так как это наиболее сбалансированная гранулярность поиска: часто люди копируют код не целыми файлами, а небольшими фрагментами, но вместе с тем метод это все еще законченная логическая единица.

Исходя из выбранных решений, для поиска клонов мы использовали SourcererCC инструмент, который ищет клоны методом мешка слов: каждый метод представляется как частотный список токенов (ключевых слов, имен и литералов), после чего такие множества сравниваются, и если больше определенной доли токенов в двух методах совпадает (такая доля называется порогом схожести), то такая пара считается клоном. Несмотря на простоту такого метода (существуют гораздо более сложные методы, основанные на анализе синтаксических деревьев методов и даже их графов программной зависимости), его главным преимуществом является масштабируемость: при таком огромном объеме кода, как у нас, важно, чтобы поиск клонов осуществлялся очень быстро.

Мы использовали различные пороги схожести, чтобы найти разные клоны, а также отдельно провели поиск с порогом схожести 100%, в котором определялись только идентичные клоны. Кроме того, был установлен минимальный исследуемый размер метода, чтобы отбросить тривиальные и универсальные фрагменты кода, которые могут не является заимствованиями.

Такой поиск занял целых 66 суток непрерывных вычислений, было определено 38,6 миллиона методов, из которых только 11,7 миллиона проходили минимальный порог по размеру, а из них 7,6 миллиона приняли участие в клонировании. Всего обнаружилось 1,2 миллиарда пар клонов.

Время последней модификации


Для дальнейшего анализа мы отобрали только межпроектные пары клонов, то есть пары похожих фрагментов кода, которые встречаются в разных проектах. С точки зрения лицензирования нас мало интересуют фрагменты кода в рамках одного проекта: повторять свой же код считается плохой практикой, но не запрещено. Всего межпроектных пар оказалось примерно 561 миллион, то есть приблизительно половина всех пар. Данные пары включали в себя 3,8 миллиона методов, для которых и нужно было определить время последней модификации. Для этого к каждому файлу (которых оказалось 898 тысяч, потому что в файлах может быть более одного метода) была применена команда git blame, которая выдает время последней модификации для каждой строки в файле.

Таким образом, у нас есть время последней модификации для каждой строки в методе, но как определить время последней модификации всего метода? Кажется, что это очевидно берешь самое недавнее из времен и используешь его: в конце концов, это действительно показывает, когда метод менялся в последний раз. Однако для нашей задачи такое определение неидеально. Рассмотрим пример:



Предположим, мы нашли клон в виде пары фрагментов, каждый по 25 строчек. Более насыщенный цвет тут означает более позднее время модификации. Допустим, фрагмент слева был написан за раз в 2017 году, а во фрагменте справа 22 строчки были написаны в 2015, а три модифицированы в 2019. Выходит, фрагмент справа был модифицирован позднее, однако если бы мы хотели определить, кто у кого мог скопировать, логичнее было бы предположить обратное: левый фрагмент заимствовал правый, а правый позднее незначительно поменялся. Исходя из этого, мы определяли время последнего изменения фрагмента кода как наиболее часто встречающееся время последнего изменения его отдельных строк. Если вдруг таких времен было несколько, выбиралось более позднее.

Интересно, что наиболее старый фрагмент кода в нашем датасете был написан аж в апреле 1997 года, на самой заре создания Java, и у него нашелся клон, сделанный в 2019!

Определение лицензий


Вторым и наиболее важным этапом является определение лицензии для каждого фрагмента. Для этого мы использовали следующую схему. Для начала с помощью инструмента Ninka определялась лицензия, указанная непосредственно в заголовке файла. Если таковая есть, то она и считается лицензией каждого метода в нем (Ninka способна распознавать и несколько лицензий одновременно). Если же в файле ничего не указано, либо указано недостаточно информации (например, только копирайт), то использовалась лицензия всего проекта, к которому относится файл. Данные о ней содержались в оригинальном Public Git Archive, на основании которого мы собирали датасет, и определялись с помощью другого инструмента Go License Detector. Если же лицензии нет ни в файле, ни в проекте, то такие методы отмечались как GitHub, так как в таком случае они подчиняются условиям использования GitHub (именно оттуда были скачаны все наши данные).

Определив таким образом все лицензии, мы можем, наконец, ответить на вопрос, какие лицензии наиболее популярны. Всего мы обнаружили 94 различные лицензии. Приведем здесь статистику для файлов, чтобы скомпенсировать возможные перегибы из-за очень больших файлов с большим количеством методов.

Главная особенность данного графика состоит в сильнейшей неравномерности распределения лицензий. На графике можно заметить три области: две лицензии с более чем 100 тысячами файлов, еще десять с 10100 тысячами и длинный хвост из лицензий с менее чем 10 тысячами файлов.

Рассмотрим сначала наиболее популярные, для чего представим первые две области в линейной шкале:



Видна неравномерность даже среди самых популярных лицензий. С огромным отрывом на первом месте расположилась Apache-2.0 самая сбалансированная из всех разрешительных лицензий, она покрывает чуть более половины всех файлов.

Следом за ней находится пресловутое отсутствие лицензии, и нам все же придется разобрать его подробнее, раз уж данная ситуация настолько часто встречается даже среди средних и крупных репозиториев (более 50 звезд). Данное обстоятельство очень важно, поскольку просто загрузка кода на GitHub не делает его открытым и если что-то практическое и нужно запомнить из данной статьи, то это оно. Загружая код на GitHub, вы соглашаетесь с условиями использования, которые гласят, что ваш код можно будет просматривать и форкать. Однако за исключением этого, все права на код остаются у автора, поэтому распространение, модификация и даже использование требуют явного разрешения. Получается, мало того, что не весь открытый код является полностью свободным, даже не весь код на GitHub является в полном смысле открытым! И так как такого кода много (14% файлов, а среди менее популярных проектов, не вошедших в датасет, скорее всего, и того больше), это может являться причиной значительного количества нарушений.

В пятерке мы также видим уже упомянутые разрешительные лицензии MIT и BSD, а также копилефтную GPL-3.0-or-later. Лицензии из семейства GPL разнятся не только значительным количеством версий (полбеды), но еще и припиской or later, которая позволяет пользователю использовать условия данной лицензии или ее более поздних версий. Это наводит еще на один вопрос: среди этих 94 лицензий явно встречаются подобные семейства какие из них самые большие?

На третьем месте как раз GPL-лицензии их в списке 8 видов. Именно это семейство самое значимое, потому что вместе они покрывают 12,6% файлов, уступая только Apache-2.0 и отсутствию лицензии. На втором месте, неожиданно, BSD. Кроме традиционной версии с 3 параграфами и даже версий с 2 и 4 пунктами, существуют очень специфичные лицензии всего 11 штук. К таким, например, относится BSD 3-Clause No Nuclear License, которая представляет собой обычную BSD с 3 пунктами, к которой снизу приписано, что данное ПО не должно применяться для создания или эксплуатации ничего ядерного:

You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.

Самым разнообразным является семейство лицензий Creative Commons, о которых можно почитать тут. Их встретилось целых 13 и их тоже стоит хотя бы пробежать глазами по одной важной причине: весь код на StackOverflow лицензирован под СС-BY-SA.

Среди более редких лицензий есть некоторые примечательные, например, Do What The F*ck You Want To Public License (WTFPL), которая покрывает 529 файлов и позволяет делать с кодом именно то, что указано в названии. Есть еще, например, Beerware License, которая также разрешает делать что угодно и призывает купить автору пива при встрече. В нашем датасете мы также встретили вариацию этой лицензии, которую больше нигде не нашли Sushiware License. Она, соответственно, призывает купить автору суши.

Еще любопытна ситуация, когда в одном файле (именно в файле) встречается сразу несколько лицензий. В нашем датасете таких файлов всего 0,9%. 7,4 тысячи файлов покрываются сразу двумя лицензиями, и всего обнаружилось 74 разные пары таких лицензий. 419 файлов покрывается аж тремя лицензиями, и таких троек насчитывается 8. И, наконец, один файл в нашем датасете упоминает четыре разные лицензии в заголовке.

Возможные заимствования


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

  • Нас не интересуют пары между форком и оригиналом (а также, например, между двумя форками одного проекта) для этого мы их и собирали.
  • Нас также не интересуют клоны между различными проектами, принадлежащими одной организации или пользователю (так как мы предполагаем, что авторские права в рамках одной организации разделены).
  • Наконец, вручную проверяя аномально большое количество клонов между двумя проектами, мы нашли значимые зеркала (они же непрямые форки), то есть одинаковые проекты, загруженные в несвязанные репозитории.

Любопытно, что из оставшихся пар целых 11,7% составляют идентичные клоны с порогом схожести 100% возможно, интуитивно кажется, что абсолютно одинакового кода на GitHub должно быть меньше.

Все оставшиеся после данной фильтрации пары мы обрабатываем следующим образом:

  1. Сравниваем время последней модификации двух методов в паре.
  2. Если они совпадают с точностью до дня, игнорируем такую пару: нет смысла искать нарушения с такой точностью.
  3. Если же они не совпадают, берем пару их лицензий от старшего к младшему и записываем. Например, если у блока из 2015 года лицензия MIT, а у блока из 2018 Apache-2.0, то записываем такую пару как потенциальное заимствование MIT Apache-2.0.

В конце мы просуммировали количество пар для каждого потенциального заимствования и отсортировали их по убыванию:



Здесь зависимость еще более экстремальная: возможное заимствование кода внутри Apache-2.0 составляет более половины всех пар клонов, а первые 10 пар лицензий покрывают уже более 80% клонов. Важно также отметить, что вторая и третья самая частые пары имеют дело с нелицензированными файлами также явное следствие их частоты. Для пяти наиболее популярных лицензий можно изобразить переходы в виде тепловой карты:



Возможные нарушения лицензирования


Следующий шаг в нашем исследовании определить пары клонов, являющиеся потенциальными нарушениями, то есть заимствованиями, которые нарушают условия оригинальной и принимающей лицензий. Для этого необходимо разметить вышеупомянутые пары лицензий как разрешенные либо запрещенные переходы. Так, например, наиболее популярный переход (Apache-2.0 Apache-2.0), разумеется, разрешен, а вот второй (GitHub Apache-2.0) запрещен. Но их очень и очень много, таких пар тысячи.

Чтобы с этим справиться, вспомним, что визуализированные первые 10 пар лицензий покрывают 80% всех пар клонов. Благодаря такой неравномерности, оказалось достаточно вручную разметить всего 176 пар лицензий, чтобы покрыть 99% пар клонов, что показалось нам вполне приемлемой точностью. Среди этих пар, мы считали запрещенными пары четырех типов:

  1. Копирование из файлов без лицензии (GitHub). Как уже было сказано, такое копирование требует прямого разрешения от автора кода, и мы предполагаем, что в подавляющем большинстве случаев его нет.
  2. Копирование в файлы без лицензии также запрещено, потому что это есть по сути стирание, убирание лицензий. Разрешительные лицензии вроде Apache-2.0 или BSD разрешают переиспользовать код в других лицензиях (в том числе проприетарных), однако даже они требуют, чтобы сохранялось упоминание оригинальной лицензии в файле.
  3. Копирование из копилефтных лицензий в более слабые.
  4. Специфические несовместимости между версиями лицензий (например, Apache-2.0 GPL-2.0).

Все остальные редкие пары лицензий, покрывающие 1% клонов, были отмечены как разрешительные (чтобы никого излишне не обвинить), кроме тех, где фигурирует код без лицензий (который никогда нельзя копировать).

В итоге после разметки оказалось, что 72,8% заимствований представляют собой разрешенные заимствования, а 27,2% запрещенные. На следующих графиках представлены наиболее нарушаемые и наиболее нарушающие лицензии.



Слева представлены наиболее нарушаемые лицензии, то есть источники наибольшего количества возможных нарушений. Среди них первое место занимают файлы без лицензий, что является важным практическим замечанием нужно особенно пристально следить за файлами без лицензий. Можно удивиться, что в этом списке делает разрешительная лицензия Apache-2.0. Однако, как видно из вышепредставленной тепловой карты, ~25 миллионов запрещенных заимствований из нее это заимствования в файл без лицензии, так что это следствие ее популярности.

Справа представлены лицензии, в которые копируют с нарушениями, и здесь больше всего представлены все те же Apache-2.0 и GitHub.

Происхождение отдельных методов


Наконец, мы подошли к последнему пункту нашего исследования. Все это время мы говорили о парах клонов, как и принято в таких исследованиях. Однако нужно понимать некую однобокость, неполноту таких суждений. Дело в том, что если, например, у одного фрагмента кода есть 20 старших братьев (или родителей, кто знает), то все 20 пар будут считаться потенциальными заимствованиями. Именно поэтому мы говорим о потенциальных и возможных заимствованиях вряд ли автор конкретного метода заимствовал его из 20 разных мест. Несмотря на это, данные рассуждения можно рассматривать как рассуждения о клонах между различными лицензиями.

Чтобы избежать такой неполноты суждений, можно взглянуть на ту же картину с другого угла. Картина клонирования на самом деле представляет собой ориентированный граф: все методы являются на нем вершинами, которые соединены направленными ребрами от старшего к младшему (если не учитывать методы, датированные одним днем). В предыдущих двух разделах мы смотрели на этот граф с точки зрения ребер: мы брали каждое ребро и изучали его вершины (получая те самые пары лицензий). Теперь же давайте посмотрим на него с точки зрения вершин. У каждой вершины (метода) на графе есть предки (старшие клоны) и потомки (младшие клоны). Связи между ними также можно разделить на разрешенные и запрещенные.

Исходя из этого, каждый метод можно отнести к одной из следующих категорий, графы которых представлены на изображении (здесь сплошные линии обозначают запрещенные заимствования, а пунктирные разрешенные):



Две из представленных конфигураций могут являть собой нарушение условий лицензирования:

  • Сильное нарушение означает, что у метода есть предки и все переходы от них являются запрещенными. Это значит, что если разработчик действительно скопировал код, то сделал это в нарушение лицензий.
  • Слабое нарушение означает, что у метода есть предки, и только часть из них находятся за запрещенными переходами. Это значит, что разработчик мог скопировать код с нарушением лицензии.

Остальные конфигурации не являются нарушениями:

  • Легальное заимствование соответствует случаю, когда у метода есть предки, но все переходы из их лицензий разрешены.
  • Источник это метод, который участвует в заимствовании только как источник у него есть потомки, но нет предков.
  • И, наконец, уникальные методы это методы, которые вообще не участвуют в копировании. Формально они не представлены в выводе поиска клонов, однако их легко обнаружить как все методы, которые прошли порог минимального размера и не были представлены в результатах это просто значит, что для них не нашлось клонов. Такие методы тоже можно разделить: можно отметить методы, у которых клонов нет вообще, а можно те, у которых клонов нет только в несвязанных проектах, зато есть в связанных (в форках, зеркалах, проектах того же автора или даже внутри одного проекта).

Итак, как же распределены методы в нашем датасете?



Можно заметить, что примерно треть методов не имеет клонов вообще, и еще треть имеет клоны только в связанных проектах. С другой стороны, 5,4% методов представляют слабое нарушение, а 4% сильное нарушение. Хотя такие цифры и могут показаться не очень большими, это все еще сотни тысяч методов в более-менее крупных проектах.

TL;DR


Учитывая, что в этой статье много эмпирических цифр и графиков, повторим наши основные находки:

  • Методы, у которых есть клоны, исчисляются миллионами, а пар между ними больше миллиарда.
  • Всего в нашем датасете, состоящем из Java-проектов с более чем 50 звездами, найдено 94 вида лицензий, которые распределены очень неравномерно: наиболее часто встречаются Apache-2.0 и файлы без лицензии. Возможные переходы также встречаются чаще всего между Apache-2.0 и файлами без лицензии.
  • Что касается запрещенных возможных переходов, то таких 27,2%, и наиболее часто нарушаются права авторов файлов без лицензии.
  • Из самих методов всего 35,4% не имеют клонов вообще, у 5,4% часть старших клонов запрещают возможное заимствование, а у 4% все старшие клоны таковы.

А к чему все это?


В заключении хочется поговорить о том, а зачем вообще нужно все вышеописанное. У меня есть по меньшей мере три ответа.

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

Во-вторых, подробный разбор наших находок позволяет сформулировать несколько практических советов:

  1. Не стоит бояться юридического веса темы лицензирования и переживать из-за большого количества лицензий и их параметров. Для начала вполне достаточно понимать суть лицензий Apache-2.0, MIT, BSD-3-Clause, GPL и LGPL.
  2. Даже для этих лицензий достаточно понимания одного главного параметра: является ли лицензия разрешительной или копилефтной. Так что если вы вдруг встретите какую-то незнакомую редкую лицензию, не обязательно читать все пять мониторов ее текста, для начала можно просто отыскать в интернете именно это ее свойство.
  3. Наиболее пристального внимания требуют файлы на GitHub, для которых лицензия не задана. Такие файлы по умолчанию не являются открытыми и их заимствование требует разрешения автора. Вместе с тем отсутствие лицензии очень редко является намеренным выбором скорее, люди просто забывают об этом. В нашей лаборатории мы ввели следующую практику: когда кому-то надо позаимствовать код, не защищенный лицензией, мы просто пишем автору или создаем ишью, объясняя нашу заинтересованность, и просим добавить в проект лицензию. В подавляющем большинстве случаев разработчик добавляет лицензию, и сообщество открытого программного обеспечения становится чуточку лучше.

За понятными описаниями лицензий, а также за советами по выбору лицензии для своего нового проекта, можно обратиться к таким сервисам как tldrlegal или choosealicense.

Ну и, наконец, полученные данные можно использовать для создания инструментов. Прямо сейчас наши коллеги разрабатывают способ быстрого определения лицензий с помощью методов машинного обучения (для чего как раз нужно много определенных лицензий) и плагин для IDE, который позволит разработчикам отслеживать зависимости в своих проектах и заранее замечать возможные несовместимости.

Хочется надеяться, что вы почерпнули для себя что-то новое из этой статьи. Соблюдать основные условия лицензирования не так уж обременительно, и можно делать все по правилам, прилагая минимум усилий. Давайте вместе просвещаться, просвещать других и приближаться к мечте о правильном открытом программном обеспечении!
Подробнее..

Убийца 1С на 1С

04.05.2021 10:05:07 | Автор: admin

Среди программистов 1С очень популярна тема убийцы 1С, в частности и потому что на 1С очень удобно разрабатывать небольшие карманные приложения с базой данных, но лицензия начинаетсяот 13.000 рублей, поэтому такие маленькие приложения никто не купит:

Поэтому есть запрос на такой же инструмент разработки приложений, как 1С, но дешевле. Бесплатно, недорого или за процент от продаж софта.

До сих пор такой убийца не найден, к сожалению.

Но вот, что интересно, он может быть написан на самой 1С. Дело в том, что 1С выпускает множество базовых решений, которые представляют собой практически полноценную платформу, но для одного пользователя и при этом очень дёшевы, например, 1С:Деньги можно купить за 600 рублей:

Убивающее решение может заключаться в том, что разворачивается SQL-база, клиенты с которой работают в базовых, дешевых, версиях 1С.

При этом придется, конечно, реализовывать логику отображения данных из базы данных в формах и списках, но подобные технологии уже знакомы программистам 1С.

А помимо этого доступны все привычные инструменты, которые являются преимуществом 1С таблицы значений в памяти, управляемые собираемые runtime формы, возможность программирования на языке 1С.

При этом код состоит из совокупности внешних обработок, которые хранятся в SQL-базе и при их обновлении кэшируются в базы пользователей.

Технически такая схема вполне реализуема. И ее преимущество не только в 20-кратной экономии затрат на лицензии. Такая реализация плавный способ перейти с 1С на нормальную SQL-базу, постепенно 1С-функции можно переписать на не проприетарную платформу.

Но вот юридически схема вызывает сомнения. Тут нужно мнение сообщества. В любом случае, если 1С почувствует сильную конкуренцию от подобных решений, она может указать в лицензионном соглашении на те же 1С:Деньги, что запрещается использовать программу для организации доступа в другую базу данных. И на этом вся техническая красота закончится.

Что скажете? Можно ли убить 1С средствами самой 1С?

Идея подобного решения возникла из практики. Сейчас в России широко внедряется маркировка товаров и некоторые отечественные дилеры стали отправлять поставщикам список марок с их штрих-кодами в графическом виде в MXL-файлах. Это файлы 1С, похожие на Excel.

Одному из производителей товаров, расположенным не в России, потребовалось обрабатывать эти MXL-файлы сортировать, вырезать необходимые участки, нумеровать этикетки.

Естественно, в их стране про 1С ничего не знали. Покупать 1С им тоже не очень хотелось. Предложение взлома было мною отвергнуто. Я уже хотел предложить им облачные решения, вроде Fresh, но потом вдруг вспомнил про 1С:Деньги. И проблема поставщика была решена за 600 рублей! Они просто запускали внешнюю обработку, которая сортировала с необходимыми отборами исходный большой файл марок в MXL или PDF.

Так что, как видно хотя бы на этом примере, базовое решение 1С позволило избавиться от необходимости стрелять из 13.000 рублевой пушки по воробьям!

Ну и резюмируя, скажу, что на мой взгляд, своей проприетарной политикой 1С ограничивает возможности распространения своей платформы. В своё время популяризации 1С 7.7 сильно помогло то, что она легко ломалась пачтами вроде Соболя. А сейчас время проприетарных платформ разработки уходит

В конечном итоге, рано или поздно, движок 1С перепишут конкуренты и она останется только в нише 1С:Бухгалтерии. И будет горько сожалеть об упущенных возможностях.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru