Суд присяжных вынес вердикт, что Android добросовестно использует Java API

    Двухнедельное судебное разбирательство между Oracle и Google подошло к концу. Oracle потратила миллионы долларов на подготовку иска и оплату работы юристов. Она тщательно подготовилась к очередному процессу, исключив из числа присяжных единственного человека со степенью в области ИТ. По опросу кандидатов в присяжные, он был также единственным, кто ещё до процесса понимал значение термина «добросовестное использование» (узнал о нём во время учёбы в Калифорнийском университете в Беркли). Но исключение этого присяжного не помогло Oracle.

    После трёх дней обсуждения вчера оставшиеся присяжные вынесли единогласный вердикт, что использование Java API в Android является примером добросовестного использования согласно законодательству об авторском праве.

    Если бы вердикт оказался иным, то судья продолжил бы процесс, приступив к фазе оценке ущерба. Компания Oracle претендовала на $9 млрд.

    «Отдаю вам честь за вашу напряжённую работу над этим делом, — обратился к присяжным окружной судья Уильям Алсуп, под контролем которого идёт этот судебный процесс с 2010 года. — Суд приносит вам благодарность и освобождает. Я бы хотел зайти в совещательную комнату присяжных и лично пожать каждому из вас руку».

    Уильям Алсуп получил особую известность во время одного из эпизодов слушаний в мае 2012 года, когда речь шла о возмещении ущерба $150 тыс. за «воровство» для Android функции rangeCheck (9 строчек кода) и тестовых файлов. Неожиданно выяснилось, что судья умеет программировать.

    Фрагмент стенограммы судебных слушаний от 15 мая 2012 года
    Oracle: Вопрос не в том, насколько велик ущерб. Вопрос в том, можно ли закрыть глаза на коммерческую выгоду нарушителя исходя из того, что объём нарушений мал.

    Кроме того, для меня не ясно, что справедливо сравнение девяти строк кода и 15 миллионов, потому что из них 10 миллионов составляет ядро Linux. Но всё равно, девять строк — это небольшой процент. Тестовые файлы гораздо больше, но они не присутствуют, по крайней мере, в текущей версии Android.

    Но и то, и другое принесло прибыль Google, ускорив сроки разработки Android. Скорость разработки для Android была критическим фактором; мы уже продемонстрировали это ранее, и мы дополнительно ещё проиллюстрируем данный факт. Они хотели быстрее, быстрее, быстрее. Это копирование кода позволило им задействовать меньше ресурсов и ускорить разработку. Предположим, что они ускорили разработку на два дня. Они зарабатывают сейчас $3 миллиона в день, активируя 700 тысяч или 800 тысяч телефонов. [По оценке Google, они зарабатывают от $8 до $10 на каждом устройстве]. Если вы просто получите ускорение на два дня, то это шесть или семь миллионов долларов, и эта сумма не следует напрямую из ценности непосредственно [украденного] кода.

    Они [Google] хотят представить ситуацию так, что если нечто маленькое, то нарушитель не получает прибыли. Да, кто-нибудь другой мог написать этот код, но сколько времени у него это бы заняло?

    Судья Алсуп: Я ничего не знал о Java до [разбора] этой проблемы.Но я раньше, да и сейчас, довольно много занимаюсь программированием на других языках. Я писал фрагменты кода вроде rangeCheck сотни раз раньше. Я мог это сделать, вы могли это сделать. Другими словами, вы можете скопировать это с такой же скоростью, что и написать самостоятельно. Это была случайность. Ни в коем случае нельзя говорить, что это ускорило их выход на рынок. Вы один из лучших адвокатов в Америке, как вы вообще можете приводить такие аргументы?

    Oracle: Я хочу вернуться к функции rangeCheck.

    Судья: rangeCheck! Да она только проверяет, что числа на входе принадлежат диапазону, и генерирует нечто вроде исключения. Тот свидетель сказал, что даже школьник может написать это.

    Если бы на примере rangeCheck был создан прецедент и Oracle отсудила $150 тыс. за 9 строчек кода, то затребовала бы компенсацию за весь остальной «украденный» код по установленному тарифу, так что общая сумма компенсации могла бы достигнуть девяти миллиардов долларов.

    Девять строчек кода rangeCheck
    private static void rangeCheck(int arrayLen, int fromIndex, int toIndex {
         if (fromIndex > toIndex)
              throw new IllegalArgumentException("fromIndex(" + fromIndex +
                   ") > toIndex(" + toIndex+")");
         if (fromIndex < 0) 
              throw new ArrayIndexOutOfBoundsException(fromIndex);
         if (toIndex > arrayLen) 
              throw new ArrayIndexOutOfBoundsException(toIndex);
    }

    Компания Google опубликовала заявление, в котором назвала эту победу важной для всех. «Сегодняшний вердикт, что Android добросовестно использует Java API, представляет собой победу для всей экосистемы Android, для сообщества разработчиков Java, для программистов, которые полагаются на открытые и свободные языки программирования, чтобы разрабатывать инновационные программы для пользователей».

    Судебная тяжба между Oracle и Google по поводу Java API в Android продолжается уже шесть лет. В 2010 году был подан первый иск, в 2012 году судья Алсуп вынес решение, что API вообще не подлежат защите копирайтом, но это решение отменили в апелляционном суде. Сейчас суд присяжных утвердил другой вариант обороны от претензий Oracle: программные интерфейсы в Android назвали примером добросовестного использования кода Java.


    Программист Дэн Борнштейн, который давал показания на судебном процессе, назвал виртуальную машину Dalvik по имени маленькой рыбацкой деревни в Исландии. Фото: Дэн Борнштейн

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

    Oracle намерена опять подать апелляцию.

    «Мы твёрдо убеждены, что Google разработала Android нелегально скопировав ключевую технологию Java, чтобы быстро ворваться на рынок мобильных устройств. Oracle начала этот судебный процесс, чтобы прекратить незаконные действия Google. Мы считаем, что существуют многочисленные основания для подачи апелляции, и мы планируем вернуть это дело в федеральный окружной суд для апелляции», — сказал Дориан Дейли (Dorian Daley), главный юрист Oracle.

    «Они скопировали 11 500 строк кода, — заявил адвокат Oracle Питер Бикс (Peter Bicks) в последнем слове перед вынесением вердикта. — Это не обсуждается. Они забрали наш код, скопировали его, и вставили прямо в Android».

    Представители Google отвечали, что язык программирования Java всегда был «свободным и открытым» для использования — это касается и повторной реализации Java API. В качестве одного из свидетелей на суде выступил исполнительный директор компании Sun Microsystems, которая разработала Java. Эту компанию купила Oracle в 2009 году. Он признал Android законным, конкурентоспособным продуктом.

    Исполнительный директор Oracle Ларри Эллисон сначала приветствовал появление Android, но «передумал, когда попытался использовать Java для своего смартфона и потерпел неудачу», — сказал жюри адвокат Google Роберт Ван Нест (Robert Van Nest).
    Поделиться публикацией
    Комментарии 53
      +6
      Она тщательно подготовилась к очередному процессу, исключив из числа присяжных единственного человека со степенью в области ИТ. По опросу кандидатов в присяжные, он был также единственным, кто ещё до процесса понимал значение термина «добросовестное использование» (узнал о нём во время учёбы в Калифорнийском университете в Беркли).

      Мне одному это кажется абсурдным? Я предполагал, что на процессы отбираются люди наоборот, как можно более компетентные в предметной области, чтобы они могли выносить решения осознанно, а не на основании первого впечатления.

      Тут же получается соревнование «кто больше заморочит голову присяжным дилетантам». Домохозяйка конечно лучше решит, подпадают ли эти строки кода под понятие fair use или нет. Шапито какое-то.
        +10
        Вообще, нет, это не абсурд.
        Процесс выбора присяжных не позволяет набрать дюжину специалистов в конкретной области. Он и не должен этого позволят, иначе было бы слишком просто использовать эти сложности в своих целях.
        А единственный такой человек среди присяжных — это обезьяна с гранатой. Может, ему препод в университете попался неудачный и теперь он затаил такую злобу на Java, что будет необъективен. Маловероятно? Да, но риск есть.
        Присяжные же должны быть объективны. Этого гораздо проще добиться, когда они не имеют к предметной области никакого отношения. Задача обвинителя и адвоката сделать так, чтобы даже домохозяйки поняли их точку зрения и исходя из этого приняли решение в с точки зрения закона (и никто от них не ждёт, что они будут знать этот закон досконально).
          +1
          Ну так по этому присяжных и много и набираться они должны из разных групп, чтобы уменьшить вероятность, что все специалисты куплены одной компанией и придерживаются одних взглядов.

          Просто иначе это вообще лотерея получается.
            +1
            Этот процесс (выбора присяжных) и должен быть лотереей. Для того, чтобы процесс был адекватным и справедливым, там и сидит судья.
              +5
              Так если набирают всех подряд по лотерее, а это именно так, то что мешает одной из сторон «продавить» таких присяжных грязными психологическими трюками завязанными на эмоциях и священных коровах? Например, если средний возраст присяжных за 40, можно рассказать слезодавку про то, что недополученная прибыль не дала возможности пожертвовать на благотворительность в Африке, и там по вине такого-то нехорошего ответчика умерло от голода ХХХ детей. Это неявно склонит присяжных на сторону истца, поскольку действия ответчика получают отрицательную эмоциональную окраску. Где тут объективность-то? Или предусмотрены какие-то способы противодействия такому давлению?
                +2
                Какой-то уж совсем ядрёной пурге не даст прокатить сам судья (в статье есть прямо стенограмма такого случая). Что-то более тонкое уже должен отбить представитель противника. Обвинитель и адвокат в данном случае выступают в качестве противовесов друг-другу. В теории это позволяет присяжным как раз узнать объективную истину — каждая сторона заинтересована в том, чтобы довести свою точку зрения и в итоге в споре рождается истина.
                Понятно, что всё это розовая теория и реальность с ней не во всём совпадает, но вариант с подбором жюри специалистов под процесс, на мой взгляд, хуже.
                  0
                  ну а если бы судья не был как раз таки подкован технологически, что видно из этой стенограммы?
                  0
                  Я думаю, присяжные так или иначе должны, ознакомится с делом и его нюансами, к тому же они совещаются перед вынесением вердикта. Среди присяжных так же могут быть экономисты или деятели общественных организаций, которые могут знать, какие компании какие пожертвования совершают и как это сказывается на обществе. Я думаю, подобного рода лож сделает только хуже
                    –2

                    Ну так адвокаты ответчика это предусмотрят и не дадут набрать всех 40+ в присяжных. Условно.

                      0
                      По крайней мере, если верить фильмам, то этим как раз злоупотребляют.
                0
                да и нет. в данном случае мы понимаем, насколько это всё глупо, но при других обстоятельствах (другом деле) представитель IT мог быть заинтересован в том, что шло бы разрез с интересами обычных, не IT-людей. ну я в общем говорю.
                  +3
                  Так в том-то и дело, что айтишники не лезут к аграрникам и не говорят, как ростить пшеницу, а тут получается что сугубо технический вопрос решают некомпетентные люди. Смысл с такого суда? Ведь в конечном итоге у кого язык лучше подвешен, тот и прав. Глупость, нет?
                    0
                    да, но дело в предвзятости. если будет суд о разрешении роботов автомобилей, вы бы хотели, чтобы его решали таксисты? в данном случае любой таксист будет ратовать за то, чтобы их не разрешали. его не будет интересовать ни снижение смерти на дорогах, ни экономическая выгода. в данном случае ситуация конечно другая, но система должна исключать людей которые могут быть лично заинтересованных в вопросе.
                      0
                      В Вашем примере должны решать не таксисты, а логисты, такстисты в Вашей аналогии что-то вроде процессоров в андроид-телефонах, то бишь люди, не несущие ответственности за такие решения.
                        0
                        простите, я не понял вашу мысль
                  0
                  Есть масса способов устроить отвод присяжным. Рекомендую посмотреть Американскую историю преступлений. Там на примере процесса против О Джей Симпсона разворошен весь абсурд судебной системы. Это, конечно, не полная документалка, но по мотивам. И играют актёры на удивление неплохо.
                    0
                    А в сериале показывается, что Симпсон убийца и был политически оправдан цветными присяжным?
                      0
                      Вы хотите, чтобы я устроил спойлер? Не дождётесь — смотрите фильм. В качестве затравки — там играет Траволта.
                        –2
                        Я не хочу смотреть политически корректное промывание мозга, даже если оно с Траволтой.
                    0
                    Что касается выбора присяжных, то очень рекомендую к просмотру сериал «Американская история преступлений» (8 серия, если быть точным). История сугубо криминальная, однако эпизод очень подробно останавливается на том, как назначаются присяжные и как их исключают из состава жюри.
                      0
                      Представил себе суд «Майкрософт против в РедХат» и состав присяжных — по 6 ярых приверженцев Винды и Линукса.
                      Холивар в чистом виде.
                        0
                        Именно поэтому этот состав присяжных выпилят сразу же, до начала слушаний.
                          0
                          Конкретно в США — не смогут. У обеих сторон есть ограниченное количество возможностей для отвода. Ещё может быть отвод по причине предыдущего знакомства с делом (читал в газете, например), но в данном случае это не проканает.
                          0
                          Не холивар, просто war. В таком деле одним судом не обойдёшься — это будет война. А потом придут freebsdшники и всё закончат :)
                        0
                        Если не можете внятно объяснить свою концепцию дилетантам, то у Вас будут серьезные проблемы не только в судах. А специалисты бывают со своим набором стереотипов, навязанных узкоспециализированным обучением и опытом. И просто зашоренными и консервативными, по жизни.

                        Не забывайте, что американский суд создает прецедент, фактически — закон для всех. По которому будут жить и домохозяйки, строители, водители грузовиков и все остальные граждане.
                          0
                          Все-таки не нужно забывать, что не любой американский суд создает прецедент.
                            0
                            Можно ли об этом поподробнее? Насколько понимаю, в гражданском праве в USA любое решение может быть прецедентом, нет?
                              0
                              По общему правилу обязательными (в США это не абсолют, суд может отклонить прецедент, посчитав его неприменимым в данном случае) являются решения вышестоящих судов для нижестоящих, то есть, если я правильно помню, «прецедентность/обязательность» начинается с Окружного апелляционного суда, для нижестоящих судов этого округа, но его решения не являются прцедентными для судов первой инстанции другого округа, плюс нужно учитывать наличие федеральной судебной системы и судебной системы штатов, там тоже все сложно. Вообще это очень сложная и запутанная схема, для людей привыкших к Романо-германской (континентальной) системе права.
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Как уже многие отписали в своих комментариях, суд присяжных должен быть не специализированной комиссией, а просто дюжиной домохозяек, которым адвокаты каждой из сторон должны донести свою позицию. Именно поэтому специалистов в каких-то вопросах, связанных с конкретным судебным разбирательством, можно отстранять.
                            0
                            Последний абзац очень интересный, что-то объясняет.
                              0
                              Всегда интересно и не понятно.
                              1. Если oracle выиграет процес, android попытается заменить java в своей операционной системе или это практически невозможно?
                              2. Если такие процессы возможны против google, то верно ли я понимаю, что судиться подобным образом могут с любой компанией, которая при разработке софта использует java?
                              Или всё не так и всё не верно?
                                0
                                Речь идет об использовании jdk, а не конкретно языка. А у оной есть пара альтернатив.
                                  +1
                                  да, у jdk есть альтернативы. Тем не менее google не делает замены, так как… Не знаю почему.
                                  Тем не менее, (выдуманный пример) крупная компания начинает разрабатывать программный комплекс, который имеет клиентский и серверный код на java в том числе привязан к оборудованию и использует наработки oracle. С этой компанией могут судиться?
                                  Или же android использует такие стороны в jdk, что другие компании не лезут в такие дебри никогда?
                                  Или вообще весь процесс по сути «юридический бандитизм» и не имеет никакой связи с логикой?
                                    0
                                    Причины, естественно, зарыты глубоко, и понять их без инсайда тяжеловато. Могу предположить, что Google не перешли на OpenJDK лишь потому, что часть андроида основана на определенной части OracleJDK таким образом, что при замене производительность упадет в разы, и это если так вообще удастся переделать. Ведь даже JVM от оракла не полностью открытая. Наверняка, там есть некоторые улучшения, поднимающие производительность. Поэтому, возможно, никто и не хочет переходить на OpenJDK, так как многие пользователи посмотрят, что «начало лагать» и перейдут на продукты от Apple или Microsoft. Может немного утрированно, но то, что часть рынка будет потеряна — это факт. А может быть, просто лень переписывать, это ведь время и деньги, и потеря авторитета.

                                    С другой стороны где-то проскакивала инфа, что Android N хотят написать на OpenJDK изначально, даже где-то на GeekTimes.
                                      0
                                      ?? Google библиотеки Apache Harmony использовал а VM полностью своя была и есть (тут можно долго вдаватся в различия Dalvik и ART но и то и другое — разработка Google а не кого то еще).
                                      в Android N переезд с Apache Harmony на OpenJDK но VM по прежнему остается своя, в очередной раз модернизированная
                                        0
                                        тогда вообще непонятно, чего хочет Oracle от Google
                                          +1
                                          Насколько я понял Oracle хочет получить что-то типа «недополученной прибыли» за годы существования и развития Androidа из-за (по их мнению) недобросовестного изпользования Java API
                                          И соответсвенно если суд примет сторону Oracle, а Google будет продолжать использовать JDK от Oracle в системе Androidа — то получать отчисление за каждый девайс с установленным на нем Android'ом
                                            –1
                                            Как минимум, чтобы гугл перестал распространять несовместимую с OpenJDK платформу. Из-за того, что гугл уже 8 лет распространяет несовместимую с OpenJDK платформу, происходит дефрагментация Java. Именно благодаря этому суду гугл наконец-то получил пинок под зад и наконец-то запилит совместимость с OpenJDK.
                                  +1
                                  Простите, а зачем ремарка о том что присяжные вынесли единогласный вердикт? Разве они не обязаны обсуждать проблему до тех пор пока не примут единогласное решение? Хоть мытьём, хоть катаньем, хоть тушкой, хоть чучелом, хоть измором, но единогласное.
                                    0
                                    Насколько я понимаю, это верно не для всех судов присяжных.
                                    В некоторых случаях решение принимается банальным большинством. И если присяжные решии поровну, то решает голос судьи. Вот только не знаю, где оно как, и насколько единообразно в США.
                                      0
                                      Как всегда в США, it depends:
                                      «Following the English tradition, US juries have usually been composed of 12 jurors, and the jury's verdict has usually been required to be unanimous. However, in many jurisdictions, the number of jurors is often reduced to a lesser number (such as five or six) by legislative enactment, or by agreement of both sides. Some jurisdictions also permit a verdict to be returned despite the dissent of one, two, or three jurors» (https://en.wikipedia.org/wiki/Jury_trial#Civil_trial_procedure).
                                      0
                                      для Java API действительно применимы законы о защите авторского права. На самом деле они вообще не должны подлежать копирайту

                                      Может мне кто-нибудь объяснить, с какого перепугу?
                                        +3
                                        Другие вам объяснят лучше, но попробую пока я. Думается, что API в принципе не должны подлежать копирайту, потому что в их дизайне не столько полёта творческой фантазии, сколько здравого смысла и понимания предметной области. Понятно, что спроектировать развесистый и в то же время хороший API — это искусство (пусть другие скажут, насколько это относится к Java), но существует не так уж много способов выбрать нужные для определённого заданного дела вещи, назвать их своими именами и разложить в коробочки. Признавать API объектом авторского права опасно для всей индустрии, потому что если мы это признаем, то в следующий раз, когда вы сделаете себе интерфейс Buffer и заведёте в нём методы Read и Write, то к вам придут и потащат вас в суд на том основании, что вы скопировали их API structure, sequence and organization. То есть вас будут судить за то, что вы всего лишь назвали лопату лопатой, хотя казалось бы, ну как её ещё назвать?.. В общем, такого джинна лучше оставить в бутылке.
                                          0
                                          Но тем не менее это не означает, что сторонний разработчик может взять чужую платформу и дефрагментировать её переработав развесистый АПИ, сделав его лишь частично совместимым с оригиналом. Да еще назвав эту платформу как и оригинальную, вводя в заблуждение пользователей.

                                          Конечно нельзя судить за похожее назавние методов, но должен быть какой параметр показывающий, что была скопирована и изменена оригинальная платформа.
                                            0
                                            Мне кажется, что это очень спорно. «Фрагментация платформы» и «ввод пользователей в заблуждение» — это риторика Oracle для зала суда, но сами пользователи, ан масс, не спешат заявлять о себе и жаловаться. (Мы же не жалуемся, что JavaScript своим названием нас, бедных, в заблуждение вводит — любой разработчик осознаёт разницу между платформами, даже для него непрофильными.) Oracle не сумела показать, что это проблема для community. Разработчиков вряд ли озаботит, что у них в двух разных платформах есть некоторые различия, но вот вечный страх, что они назовут вещи своими именами, отсортируют как надо и внезапно обнаружат, что авторское право называть вещи своими именами есть у какой-то конторы, и они внезапно это право нарушили — вот это, думаю, озаботит. Или вас беспокоит не несовместимость, а сам факт того, что взяли? Тогда это то, о чём я выше говорил — в дизайне API (то, что вы называете платформой) не так много каких-то уникальных творческих решений, и лежат они в основном не в SSO.

                                            В общем, перед разработкой параметра, о котором вы говорите, надо решить, есть ли в этой области само понятие копирования, и если есть, то в какой степени. Я не уверен, что, смотря на какой-нибудь API, я смогу отделить «Вася скопировал почти всё у Пети» и «Вася посмотрел на схему автомобиля и решил назвать двигатель Engine, поместить внутри него Pistons и Spark plugs...». И вот так, покатившись по наклонной, Вася вступил на криминальный путь, а виновата схема и справочник технических терминов. И теперь Вася должен доказывать, что он не верблюд, и сделал cleanroom design. У суда-то перед глазами будет результат а не процесс. Если сможете определить такой параметр, то попытайтесь, конечно — это я вам просто иллюстрирую, что проблему мы решаем весьма размытую, а риск устроить всем разработчикам весёлую жизнь просто огромный.
                                              0
                                              Ладно это все понятно. Тут более интересная тема поднимается http://arstechnica.com/tech-policy/2016/05/op-ed-oracle-attorney-says-googles-court-victory-might-kill-the-gpl/ Получается теперь я могу написать программку, которая сделает рерайт сырцов любой GPL программы, т.е. заменит if на case, while на for, поменяет имена приватных методов и переменых (по словарю синонимов). Ну и нанять десяток индусов, после прохода программки, чтобы наиболее палевные места почистили. И вот из GPL получаются проприетарные сырцы или сырцы под какой хочешь лицензией.
                                                0
                                                Foror разве вы сейчас не описали рефакторинг? Когда он проводится не с целью улучшения кода, а с целью скрыть, что решение вы скачали из интернет?
                                                ps
                                                однажды я понял. Вы вполне можете даже не писать код и тем не менее получать отчисления за авторские права. Но грамотных юристов Вам надо нанять целое здание.
                                                  0
                                                  Одно дело копировать код со стековерфлоу, а другое дело скопировать пол проекта под GPL лицензией и интегировать это в свой проект под своей лицензией.
                                                  0
                                                  А при чём здесь исходный код? Мы об API говорим, копирования реализации не произошло, и из решения суда никак не следует, что копировать реализацию было бы fair use. Это адвокаты Oracle (вот как раз Анетта Хурст, автор темы, на которую вы сослались) нарочито пытались и пытаются стереть разницу между реализацией и API, называя последний не иначе как просто «скопированным кодом», но это их программная риторика, а для суда разница вполне себе была. Так что, если кто-то будет копировать реализацию и переименовывать приватные методы, то прецедентом этот процесс скорее всего не будет.

                                                  Вообще я бы воспринимал заявления адвокатов Oracle с долей скептицизма, тем более после разбора гениальной rangeCheck() и прочего фарса во время процесса. На веру как-то принимать уже не хочется.
                                          +1
                                          Идиотизм какой то. Мы вам дали API а вы его использовали. И таки шо?
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                              0
                                              Нет разницы, на сколько оно копипаста кода ускорила разработку и сколько процентов этот код занимает — тут либо нарушаются авторские права, либо нет.

                                              Сколько было стартапов с моделью «Мы же технарская элита, зачем нам менеджеры и прочий гуманитарный скам» — они либо умирали, либо в конечном итоге приходили к стандартной модели с СЕО, маркетигом и прочими штуками, которые все так не любят. Потому что эта бизнес-модель работает.

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

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