Обмануть Мигеля?


    Как-то раз Мигель…
    (Хотя нет, история не совсем о нем, попробую начать иначе)
    Однажды в мире Open Source…
    (Тоже мимо, OSS в истории затронуто лишь частично)
    Когда жажду наживы называют здравым смыслом, начинается обман.
    (Почти афоризм)

    Предыстория

    Стукнуло мне в голову написать программу под Мак на C#. Я поблагодарил Мигеля де Икасу за отличный Open Source проект Mono, воздал хвалу за его же библиотеку MonoMac, чуть ругнулся на сыроватый MonoDevelop и принялся за работу. Через некое время был оплачен аккаунт в AppStore, программа была в шаге от завершения, когда начался большой проект по основной работе и ее пришлось отложить. И вот через год пришло сообщение, что пустующий аккаунт в AppStore будет закрыт через 30 дней — это был знак, что надо что-то делать. MonoDevelop, обновившийся сам до Xamarin Studio, предложил сразу проект MonoMac преобразовать в Xamarin.Mac и повел меня на сайт, где было предложено купить этот самый Xamarin.Mac всего за $999, иначе деплоймент в AppStore будет невозможен.

    Сказать по правде, я был несколько ошарашен — начиная хобби-разработку в бесплатном продукте я и думать не мог об оплате тысячи долларов за возможность публикации, пусть и рассчитывал заработать на пиво. Даже больше — я смутно помнил посты и истории успеха на StackOverflow о публикации в маркете, каком-то пекеджере и пр. Но все нужные галочки в Xamarin Studio были намертво отключены и требовали покупки полной версии продукта. Тут я и понял, что где-то меня обманули, или выражаясь современным языком, изменили стратегию распространения продукта так, что премиум услуга публикации в маркет стала платной.

    Все в своем праве

    Если смотреть на отношения мои и Xamarin в лице Мигеля, то никто никого не обманывал — разработчик в праве делать со своим продуктом что-угодно, тем более менять лицензии или предоставлять премиум услуги за отдельные деньги. В случае Xamarin.Mac это услуга статической линковки с библиотеками Mono, в ходе чего программа перестает быть зависимой от Mono Runtime и может запускаться на любом компьютере. Также проект подписывается нужными сертификатами, снабжается Entitlements, настройками Sandboxing и пр. требованиями для публикации в AppStore:
    As of December 12th 2012, Xamarin now offers a superset of MonoMac called Xamarin.Mac. It features broader API coverage, a commercial license for Mono's LGPL components, Mono embedding, license to publish to the Mac AppStore and support.

    Сам Mono Runtime тоже распространяется по лицензии GNU Library GPL 2.0 , в которой вопрос статической линковки остается довольно спорным. Если опустить хитросплетение терминов, то выпуская проприетарный продукт, слинкованный с LGPL библиотекой, разработчик должен еще и дать возможность заменить эту LGPL библиотеку на другую версию. Обычно это подразумевает, что вместе с программой надо поставлять и исходный код, либо использовать другую лицензию. Сайт Xamarin придерживается того же мнения:
    Or if you ship an application that requires to statically link the Mono runtime and you are not able to provide the object code to relink Mono, you must obtain a commercial license from Xamarin.


    Обман

    Меньше всего в жизни мне хотелось кого-либо обманывать, тем более такого уважаемого человека, как Мигель де Икаса, автора Gnome, Mono, основателя Xamarin и Ximian. Но по большому счету я уверен, что его маркетологи сделав продукт платным (и как по мне, непомерно платным), уже меня обманули прикрывшись буквой закона и нарушив его дух. Потому это же право я оставил за собой, формально ничего не нарушив, но в результате опубликовав свою программу в AppStore с бесплатной версией инструментария. Программа содержит кроме всего прочего .exe файл с .NET Bytecode и нужными библиотеками, который может быть выполнен с помощью актуальной .NET Framework и Mono Runtime, а также абсолютно достаточен для статической линковки c библиотеками Mono, AOT компиляции или других действий. Но лицензия LGPL не обязывает меня писать инструкцию для конечного пользователя, как это сделать (не говоря о том, что я и сам этого не знаю), только предоставить все необходимое для этого.


    Технические нюансы

    Мой MonoDevelop сам обновился до Xamarin Studio и создание .pkg пакетов там теперь заблокировано. Также на странице MonoMacPackager пропала инструкция по созданию пакетов и появились ссылки на Xamarin.Mac. Это неприятно, но не смертельно, ведь в природе есть и архивы, и более старые версии продукта. Я скачал MonoDevelop 3.0.6, адаптировал проект под него (пришлось убрать один несовместимый вызов API), выбрал параметр «Link All» и… так и не смог нормально откомпилировать программу. Сказать по правде, причины я не понял, упаковщик просто отказывается работать с разными версиями Mono Runtime, выдает ошибку линковки и дальше не проходит. Но все же, выбрав пункт «Don't link» можно создать проект, он будет на ~8 мегабайт больше, но работать будет без особых проблем. В проект при этом включаются полные версии сборок System.*.dll, а не только мета-данные, как было бы с «Link All» режимом. В моем случае это даже плюс, потому что такое же правило относится и к основному .exe проекта — в нем остается весь байткод.

    Полученный таким образом инсталлятор отлично запускается, устанавливает продукт, но затем программа отказывается стартовать. Исследование гугла и системного лога показало, что Mono Develop включает в программу неверные Entitlements — keychain-access-groups, которые не совместимы с версией ОС 10.8, а может и вообще не валидны. Эта проблема решена в Xamarin.Mac, но я ведь пошел тернистым путем, потому решать ее тоже должен был сам. В результате я остановился на варианте выполнения post-build скрипта, который применяет корректные данные к сборке и заново подписывает ее.
    Версия была отправлена в AppStore, но тут же вернулась с сообщениями о других проблемах с Entitlements, отсутствием подписи у файла libMonoPosixHelper.dylib, а заодно не разрешенном использовании Shared Memory. Первое решилось дополнительными правками plist файла, второе — доработкой post-build скрипта, а вот третья проблема поставила меня в тупик. Информация о проблеме была на Stackoverflow, но там говорилось, что она уже исправлена, а вообще решается установкой переменной окружения MONO_DISABLE_SHARED_AREA. Идея с переменной вполне хороша, но ставить-то ее надо не на этапе компиляции, а на этапе выполнения уже на компьютере клиента. Я не знаю, как это решается в Xamarin.Mac, но сам решил добавлением ключа в файл info.plist, который и ставит эту переменную при запуске программы:
        <key>LSEnvironment</key>
        <dict>
            <key>MONO_DISABLE_SHARED_AREA</key>
            <string>1</string>
        </dict>
    

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


    Эпилог

    Программа сейчас в маркете и честно приносит свои 1 доллар и 40 центов в день. Если ничего не изменится, то через 713 дней я смогу купить полную версию Xamarin.Mac, без учета платы за сам AppStore. Мигелю я написал в Твиттер об этой ситуации, но ответа не получил. Другому вопрошающему по этому же вопросу он ответил в ключе «пользуйтесь», но лучше купите Xamarin.Mac.
    Скрытый текст

    Тем временем мне ответили ребята из саппорта Xamarin, что как постоянный клиент Xamarin.iOS и действующий студент я могу купить продукт всего за $99. Это хорошее предложение и наверняка я на него соглашусь, пусть и не совсем солидарен с позицией компании.

    P.S. Всем комментирующим в ключе «гадкий пират отбирает деньги у уважаемого человека» советую не тратить зря нервы и не повышать энтропию мировой сети.
    Поделиться публикацией

    Комментарии 50

      –6
      Обманывать Мигеля де Икаса — тяжкий грех. Для таких людей в аду есть отдельный котел!
        +53
        Поговаривают, что на предстоящей «Build Conference» объявят о покупке этой компании Майкрософтом.
        Как известно, обман Майкрософта — православно, это предполагает отпущение тяжких грехов.
          +3
          Опередили, только хотел написать что сейчас для Microsoft очень удачный ход бы бы развивать C# на все платформы, думаю сами они бы сделали не хуже Xamarin. Хотя покупка тоже вариант…
            +6
            Было бы круто, если бы мелкомягкие выкупили замарин с потрохами. Майкрософту позарез нужна реклама своей платформы, раздача на халяву инструмента для кросс-платформенной разработки под все оси должна пошатнуть возражения в духе «Зачем мне горбатиться ради 2%?».
            +4
            Ничего, скоро микрософт купит его вместе с замарином и сделает все бесплатным.
              –9
              >и сделает все бесплатным.

              Microsoft и «бесплатно» не совместимы.

              Вы хотя бы представляете, сколько стоит Visual Studio?
                +19
                С этим у мс все в порядке. Одних вон экспресс студий бесплатных сколько (только не говорите, что на него решарпер нельзя поставить). И это не считая всяких dreamspark, bizspark, msdn aa итд.
                  –20
                  Какой же у вас ник правильный.

                  >С этим у мс все в порядке. Одних вон экспресс студий бесплатных сколько (только не говорите, что на него решарпер нельзя поставить). И это не считая всяких dreamspark, bizspark, msdn aa итд.

                  С этим и у Мигеля все в порядке: аналогичные **скидочные** программы и бесплатные урезанные версии.

                  PS: «Xamarin for Visual Studio» на VS Express тоже поставить нельзя
                    +11
                    С этим и у Мигеля все в порядке: аналогичные **скидочные** программы и бесплатные урезанные версии.

                    Смешно вы пошутили.

                    Цена замарина за разработку в VS внезапно взлетела в несколько раз. Бесплатная версия разве что для Hello World годится, учитывая ограничения.

                    А вот в Visual Studio Express можно собрать что угодно. Ограничены только удобства разработки, отладки, тестирования и прочего, но всё критически необходимое бесплатно. Выбор «деньги или время», а не «деньги или шиш».
                      –3
                      Вы сами себе противоречите.

                      >Цена замарина за разработку в VS внезапно взлетела в несколько раз.
                      Во-первых, у Xamarin раньше не было бесплатной и indie версии ВООБЩЕ, а только за 999$ и 1899$.
                      Во-вторых, разработка в VS, это был отдельный продукт, который только добавляет возможность разработки в **привычной** среде.
                      В-третьих, Xamarin.Mac, про который тут в статье речь, он Mac-only.
                      В-четвертых, публикация приложений во всякие там сторы доступна в бесплатной версии
                        +4
                        Во-первых, у Xamarin раньше не было бесплатной и indie версии ВООБЩЕ, а только за 999$ и 1899$.

                        Это убедительно доказывает доступность замарина по сравнению со студией, да.

                        Во-вторых, разработка в VS, это был отдельный продукт, который только добавляет возможность разработки в **привычной** среде.

                        Независимо от того, что там и как разделяется, воя по поводу повышения цены — дофига и больше. Или мне причудилось?

                        В-четвертых, публикация приложений во всякие там сторы доступна в бесплатной версии

                        И толку от публикации Hello World?
                          –4
                          >Это убедительно доказывает доступность замарина по сравнению со студией, да.

                          Для справки, VS Pro стоит $1199, VS Ultimate $13299

                          >Или мне причудилось?

                          Вам причудилось: цены повысились, когда Xamarin вышел из бета версии.
                            +1
                            Для справки, VS Pro стоит $1199, VS Ultimate $13299

                            Неправильная у вас справка.
                            Pro 499$ / 19.5 т.р. же.
                                +1
                                Ну это с MSDN подпиской. Не всем так уж необходимо то, что она дает.
                                  –2
                                  Переплатить 600 долларов и получить в подарок лицензий на несколько тысяч, по-моему, это того стоит.
                                    0
                                    Если они нужны — видимо стоит.
                                    Но у Xamarin-то нет такого, мы ж их сравнивали.
                                0
                                Что ж вы не написали «от 3855 рублей»?
                                –1
                                И да, где «опровержение» про VS Ultimate?
                                  +2
                                  А должно быть?
                                  Вероятно нет таких людей, которые покупают Ultimate за 13.000$, но отказались бы доплатить 600$ за мсдн.
                                  Но вообще я встречал мало людей покупающих Ultimate, обычно всем и Pro с решарпером хватает, а что конкретно за фичи в Ultimate даже не знают.
                                    0
                                    В ультимейте, к сожалению, несколько вкусняшек типа IntelliTrace. Правда не уверен, что они стоят такой разницы в цене.

                                    Признаться, я вообще не понимаю, кто за такую цену берёт. В компаниях всегда подписка, а поштучно ультимейты покупать — эдак и разориться недолго.
                                      0
                                      Code Lens в 2013 весьма удобны. Переключаясь с Ultimate на Pro иногда не хватает многих мелочей.
                    +2
                    Майкрософт всю жизнь живёт за счёт того, что все с молодого возраста «подсаживаются» на бесплатную/дешёвую/подсунутую винду и все сопуствующие инструменты, а потом тащут их повсюду, потому что только их и знают. У компании и с пиратами-то не такие однозначные отношения, потому что она стала монополистом не в последнюю очередь благодаря им.

                    Xamarin выглядит как инструмент, который Майкрософту выгоднее раздавать бесплатно. Там не дураки сидят, они прекрасно понимают, что доступность кросс-платформенной разработки на их инструментах для их оси принесёт куда больше дохода, через продажа замарина богатым буратинам. Это шанс восьмой винды вырваться из замкнутого круга «нет софта — нет юзеров — нет разработчиков — нет софта».
                      0
                      Ну-ка, ну-ка, покажите мне бесплатную винду?
                        +7
                        По вкусу: бизспарк, дримспарк, пиратская бухта, в комплекте с железом (не бесплатно, но удалить дороже), акция с апгрейдом до восьмёрки за копейки, скидки для отсталых стран и т.д. и т.п.
                          –12
                          >бизспарк
                          У меня нет своего _малого_ бизнеса

                          >дримспарк
                          Я не студент

                          >пиратская бухта,
                          Не законно

                          >в комплекте с железом
                          Покупаю без активированной винды

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

                          >скидки для отсталых стран
                          Эта страна не отсталая, да и та, в которой я живу — тоже.

                          >и т.д. и т.п.
                          Вы продолжайте, продолжайте.
                            +6
                            У вас странные фантазии. Я не обещал лично вам бесплатную винду. Я говорил про доступность винды широким массам.

                            К слову, при должном упорстве бизспарк можно выбить и для индивидуального разработчика.
                              –9
                              >Я не обещал лично вам бесплатную винду.

                              Вы написали, что ВСЕ подсаживаются на БЕСПЛАТНУЮ винду. Я вам говорю: покажите, а вы меня отправляете в бухту. У вас с логикой явно что-то не в порядке.
                                +9
                                «Все» — очевидная гипербола, ибо есть приверженцы других осей. Ваш К.О.

                                Цитирую себя:
                                «подсаживаются» на бесплатную/дешёвую/подсунутую винду и все сопуствующие инструменты
                                Замечаете, что не только бесплатность упоминается? Замечаете, что легальность и доступность абсолютно всем жителям планеты Земля не гарантируются?
                0
                Вы через эпловский аппстор распространяете и виндовский исполняемый файл? :)

                Программа сейчас в маркете и честно приносит свои 1 доллар и 40 центов в день. Если ничего не изменится, то через 713 дней я смогу купить полную версию Xamarin.Mac, без учета платы за сам AppStore.
                И без учёта налогов с этих сверхприбылей :)
                  +1
                  Вы через эпловский аппстор распространяете и виндовский исполняемый файл? :)

                  Ага, причем на iOS и других платформах так же делается — генерируется валидный PE экзешник или dll с байткодом, а затем выполняется компиляция в LLVM или что-либо еще. Apple не против, ну и ладно :)
                  +1
                  Постойте… Возможно, я слоупок, но… значит ли это, что сейчас есть способ писать приложения для Apple App Store на платформе Microsoft .Net? То есть, не просто под OS X, а именно чтобы распространять можно было через App Store?
                    +1
                    Можно. Но особенность в том, что для взаимодействия с системой, графикой и пр. использовать надо не WPF или WinForms, а библиотеку MonoMac, обертку вокруг нативной Cocoa.
                      +2
                      Я бы не называл это особенностью. Для .NET некроссплатформенный GUI — это норма, а не исключение. WinForms и тот весьма условно кроссплатформенный, только под виндой нормально работает.
                    –1
                    Но по большому счету я уверен, что его маркетологи сделав продукт платным (и как по мне, непомерно платным), уже меня обманули прикрывшись буквой закона и нарушив его дух.

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

                    P.S. Всем комментирующим в ключе «гадкий пират отбирает деньги у уважаемого человека» советую не тратить зря нервы и не повышать энтропию мировой сети.

                    «Гораздо проще сказать, „не обижайтесь, но...“, чем не говорить нечто обидное совсем». (с) Тэрри Пратчетт, неточная цитата из книги «Правда».
                      0
                      При прочтении вот этого:
                      Но лицензия LGPL не обязывает меня писать инструкцию для конечного пользователя, как это сделать (не говоря о том, что я и сам этого не знаю), только предоставить все необходимое для этого.

                      Возникла мысль. Если я к программе приложу архив с исходниками запароленный, а пароль напишу, например, в окне about белым по белому или иным способом затродню доступ к ним — получается, все формальности соблюдены? Напоминает как раз таки «выполнена буква закона, но не дух», за который так ратовал автор…
                        0
                        Я подозреваю, что именно такой ход будет не корректным, ведь доступ к коду вы прячете почти без возможности его найти. В моем же случае ограничителем выступает только навык пользователя — продвинутый программист может без проблем перелинковать мою программу, или даже разобрать ее через ildasm/Reflector, и я формально не буду против. На деле я же предпочту такому коллеге просто дать исходники по запросу, чтобы он не тратил зря свое время.
                        +1
                        Обычно это подразумевает, что вместе с программой надо поставлять и исходный код, либо использовать другую лицензию. Сайт Xamarin придерживается того же мнения:

                        Or if you ship an application that requires to statically link the Mono runtime and you are not able to provide the object code to relink Mono, you must obtain a commercial license from Xamarin.

                        Исходный != Объектный
                          0
                          Мутная конторка. Продают сырой продукт. Была-бы Visual Studio на Linux + MacOS, никто бы в их сторону не смотрел.
                            0
                            Спасибо за программу! Давно пользуюсь на телефоне :)
                              0
                              Только на iOS 7 иногда зависает :(
                                +1
                                Под iOS 7 какие-то проблемы появились недавно. На днях перекомпилирую с мелкими патчами, может пройдет.
                                  +1
                                  Спасибо!
                                    0
                                    Вы рано меня благодарите. Меня убедили, что в игру надо добавить партнерские фулл-скрин баннеры при запуске. Не факт, что они у вас будут показываться (зависит от региона, наличия интернета и самих баннеров, количества побед/запусков, да и отключаются при любой покупке), но факт есть факт — игра из free with purchases стала ad supported + purchases.
                                      0
                                      При старте это совсем не страшно (по сравнению с тем, что пихают некоторые другие ad supported игры). У меня не выскакивает :)

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое