Участники форумов сообщества SitePoint недавно собрались вместе и подготовили несколько вопросов для первоначального создателя PHP, Расмуса Лердорфа. Рассматривая его ответы, я с удовлетворением обнаружил, что человек, который изначально запустил PHP-машину, поддерживает безоблачное представление о том, что такое движение с открытым исходным кодом.
Он быстро преуменьшает свой вклад в то, чем является PHP сегодня, вместо этого приписывая большую часть успеха PHP огромному сообществу разработчиков, которые присоединились к проекту на протяжении многих лет. В некотором смысле, Rasmus сегодня просто самый большой поклонник PHP.
Но достаточно от меня; давайте послушаем, что сказал Расмус!
В начале…
SP: Каким был ваш первый контакт с движением Open Source, и что вас заинтересовало в Open Source?
Р.Л .: Ну, еще в начале и середине 90-х годов термин «Открытый исходный код» не существовал.
«Свободное программное обеспечение» существовало, конечно, и я играл с Linux почти с самого первого выпуска в 1991 году. Раньше я использовал QNX и Xenix, а затем начал возиться с Minix, пока Linux не спас меня.
Я не думаю, что меня когда-либо действительно «зацепило» «движение». Если у вас нет денег, чтобы купить SCO Unix, и вы можете загрузить что-то, что работает, и даже найти людей, которые могут помочь вам запустить его, как вы можете победить это? Религия никогда не играла особой роли.
SP: Что привело вас к разработке PHP? И что, по вашему мнению, может предложить этот язык, чего нет у других?
Р.Л .: Первая версия PHP была простым набором инструментов, которые я собрал для своего веб-сайта и для пары проектов. Один инструмент делал некоторые хитрые записи в базу данных mSQL, другой действовал как интерпретатор данных формы. До того, как мне это надоело, у меня было около 30 разных маленьких CGI-программ, написанных на C, и я объединил их в одну C-библиотеку. Затем я написал очень простой парсер, который бы выбирал теги из HTML-файлов и заменял их выводом соответствующих функций из библиотеки C.
Простой синтаксический анализатор постепенно стал включать условные теги, затем циклические теги, функции и т. Д. Я никогда не думал, что пишу язык сценариев. Я просто добавил немного функциональности в синтаксический анализатор замены макросов. Я все еще писал всю свою настоящую бизнес-логику на C.
В конце концов, я считаю, что в первые дни, и до сих пор остается отличным, PHP выделяется тем, что он всегда пытается найти кратчайший путь к решению веб-проблемы. Он не пытается быть языком сценариев общего назначения, и любой, кто хочет решить веб-проблему, обычно находит очень прямое решение с помощью PHP. Многие альтернативы, которые претендуют на решение веб-проблемы, слишком сложны. Когда вам нужно что-то сделать и работать к пятнице, чтобы вам не приходилось тратить все выходные, листая руководства на 800 страниц, PHP начинает выглядеть довольно хорошо.
С.П .: Если посмотреть на показатели использования, то сейчас более 9 миллионов доменов используют PHP. У вас была идея, что PHP станет таким большим? Каково это знать, что ваш продукт, вероятно, лучшая альтернатива решениям Microsoft для Интернета?
Р.Л .: Во-первых, чтобы было ясно, я не разрабатывал PHP, который мы знаем сегодня. Десятки, если не сотни людей, разработали PHP. Я был просто первым разработчиком.
PHP очень совместный проект. Подумайте об этом так: у вас есть проблема с Интернетом. Вы можете пойти в магазин и купить дорогой упакованный в термоусадочную пленку продукт, который может решить, а может и не решить большую часть вашей проблемы. Или вы можете собраться с парой тысяч людей, у которых точно такая же проблема, как у вас, и разработать решение, которое будет работать для всех вас.
Вы не только получите решение, которое точно решит вашу проблему, но и станете частью сообщества единомышленников, где идеи и опыт свободно распространяются. Это лучше, чем любой коммерческий продукт, который вы можете купить в магазине, и для меня это лучший способ разработать этот тип программного обеспечения.
Поэтому, когда люди спрашивают меня, каково это, разрабатывать что-то, что используют миллионы людей, это не совсем соответствует тому, как я смотрю на вещи. В конце концов, я просто первый член сообщества, возникшего вокруг одного подхода к решению веб-проблемы.
SP: Кого бы вы назвали своим героем? Какие люди внутри или вне ИТ вдохновили вас?
Р. Л .: Меня действительно не вдохновляют люди в метафизическом смысле. Но я определенно ценю и уважаю ловкое решение сложной проблемы.
SP: Как вы думаете, за годы разработки PHP вы приняли самое важное решение? Есть ли какие-то решения, которые вы приняли, которые вы хотели бы, чтобы вы решили иначе?
Трудно попросить меня переосмыслить решения, которые были приняты 6 или 7 лет назад, когда PHP использовали всего 1 человек. Не забывайте, что я не стал писать язык сценариев, который будет использоваться 9 миллионами доменов: я сел, чтобы решить проблему. Решение проблемы к 17:00, чтобы вы могли пойти в кино со своей девушкой, приводит к некоторым аспектам, которые не являются идеальными 7 лет спустя, когда тысячам людей приходится обходить этот поздний ночной хак, который вы добавили.
Самое важное решение, которое я принял на этом пути, было, вероятно, отказаться от контроля. Чтобы открыть проект и дать практически любому, кто попросил полный доступ к источникам PHP. Это принесло много превосходных талантов, и люди, как правило, чувствовали настоящее чувство собственности. Проект PHP, вероятно, является одним из самых больших, когда дело доходит до числа людей, имеющих коммитный доступ к хранилищу CVS, где живут код и документация.
Движение с открытым исходным кодом
С.П .: Движение за открытый исходный код по-прежнему изображается многими как «анархическое» и своего рода «угроза обществу». Чувствуете ли вы, что это когда-нибудь получит широкое признание? Если это произойдет, как сообщество Open Source справится с этим?
Р.Л .: Я думаю, что на этот вопрос есть две части.
Что касается мейнстрима, то продукт этого «движения», безусловно, является мейнстримом. «Движение» построило Интернет, каким мы его знаем сегодня. Он построил стеки TCP / IP, используемые в большинстве операционных систем, которые используют люди (да, даже в Windows). Он построил самый популярный в мире веб-сервер, а также системы DNS и MTA, которые делают Интернет тикающим. Черт возьми, если вы вернетесь немного назад, это построило всю индустрию. Первые операционные системы были с открытым исходным кодом, потому что это был единственный разумный способ сделать что-то. Вы не могли бы продать кому-то крупный мэйнфрейм, не предоставив источник мозгов. Только позже была введена концепция непредоставления исходного кода.
Но я думаю, что ваш реальный вопрос заключается в том, что я думаю о попытке Microsoft убедить мир в том, что большие группы людей, сотрудничающие для решения проблем, каким-то образом угрожают самой структуре общества, в котором мы живем. И я не думаю, что есть «много» людей Делая это заявление, поскольку это полная чушь — я хотел бы думать, что мир — хорошее место и не полон людей, которые распространяли бы такую нелепую идею. Давайте положим конец всем встречам больших групп людей, пока мы на нем. Они могут быть злыми анархистами, чтобы уничтожить мир.
В конце концов, массовое признание не является целью. Целью большинства людей, работающих над свободным программным обеспечением и проектами с открытым исходным кодом, является сама технология. Это создание инструмента, который решает проблему. Речь идет не об идеологии для большинства из нас, и, как таковое, общепризнанное признание включает в себя только основное использование технологии. Это уже достигнуто по многим направлениям, и еще многое предстоит сделать.
SP: PHP очень мало упоминается в основной ИТ-прессе. Считаете ли вы, что PHP намеренно игнорируется вне кругов с открытым исходным кодом?
Р.Л .: PHP не очень интересен, и на самом деле ничего особенного. Это тонкий слой клея между вашим веб-сервером и всеми различными вещами, с которыми вы могли бы поговорить.
В старой традиции UNIX мы полагаемся на небольшие специализированные дополнительные библиотеки, которые выполняют всю тяжелую работу с минимальным вмешательством PHP. ASP, JSP и Cold Fusion имеют крупные компании с большими рекламными бюджетами, а сами продукты становятся все больше и сложнее с каждым выпуском, так что клиенты чувствуют, что они получили ценность своих денег. Кто собирается потратить 10 000 долларов на дискету и двухстраничное руководство?
Эта дискета и двухстраничное руководство могут быть именно тем, что им нужно для решения своей проблемы, и поэтому вполне может стоить потратить 10 000 долларов на такое маленькое целевое решение. Небольшие целевые решения представляют небольшой интерес для крупных компаний-разработчиков программного обеспечения. Концепция не масштабируется. Небольшие целевые решения без рекламного бюджета мало интересны торговым тряпкам.
Так что нет, я не думаю, что это намеренно, что PHP получает очень мало прессы. PHP так же увлекателен, как и ваша зубная щетка. Вы используете его каждый день, он выполняет свою работу, это простой инструмент, и что? Кто хотел бы прочитать о зубных щетках?
SP: Переход от общедоступной лицензии GNU с PHP v3.0 на v4.0 вызвал переполох в сообществе Open Source. Считаете ли вы, что новая модель лицензирования теперь принята и понимается как лучшее направление для PHP?
RL: PHP 3 был на самом деле с двойной лицензией. Таким образом, мы фактически не перешли от GPL к чему-то другому, мы просто отбросили часть GPL.
Я не вижу смысла в двойном лицензировании, и это вызывает много путаницы. Поместив PHP исключительно под лицензию в стиле Apache, на которую он распространяется сегодня, большая часть этой путаницы была разрешена.
Насколько мне известно, двойное лицензирование на самом деле не работает — так или иначе, люди будут использовать менее ограничительные из двух лицензий. Различные виды защиты, которые предлагает GPL, совершенно бессмысленны, когда люди могут просто выбрать использование программного обеспечения под менее строгой лицензией в стиле Apache. Так что имело смысл просто использовать менее ограничительную из двух лицензий.
Если вы оглянетесь вокруг, то не будет значительных языков сценариев, которые подпадают под GPL. И под GPLed я имею в виду строго GPLed в смысле единой лицензии. Perl имеет двойную лицензию с совершенно неограниченной художественной лицензией. Python имеет собственную лицензию. Ruby имеет двойную лицензию с собственной лицензией. Tcl находится под лицензией в стиле BSD. Я не понимаю, почему PHP, не входящий в GPL, кого-то расстроит.
Как и другие языки сценариев, вероятно, реализованные где-то на линии, GPL на самом деле не нужен. У меня не было бы проблем с отказом Microsoft от ASP и переходом полностью на PHP. Конечно, они могут принять и расширить его, но в этот момент мы будем с ними в чисто технической гонке. Это битва, в которой мы можем победить, и, в конце концов, иметь PHP везде было бы круто для сообщества PHP.
PHP сегодня
SP: К чему бы вы приписали успех PHP? Считаете ли вы, что PHP имеет какие-либо серьезные недостатки (по сравнению с другими языками)?
Р.Л .: Людям нравится PHP, потому что он решает их проблемы с Web. Таким образом, я не вижу никаких недостатков. Он выполняет работу, для которой был разработан.
Некоторые люди могут утверждать, что некоторые аспекты PHP не так зрелы, как в других языках. Поддержка ООП в PHP является примером. Но, в конце концов, это имеет мало общего с решением веб-проблемы и больше связано с эстетикой и языковым пуризмом.
SP: Вы все еще активно участвуете в разработке PHP?
Я все еще очень вовлечен. Я не трачу на это 20 часов в день, как это делал в первые пару лет, но я все еще исправляю ошибки, спорю с другими разработчиками о возможностях, а иногда вскакиваю и добавляю странный новый бит здесь и там.
SP: Какой веб-сервер лучше всего работает на PHP? Apache — или что-то еще? А на какой платформе лучше всего работает PHP? Linux / Intel, Solaris / SPARC или другое?
Р.Л .: Все это сводится к тому, что привлекает наибольшее внимание, я думаю. Большинство людей используют Linux / Intel с Apache. Это означает, что ошибки на этой платформе обнаруживаются самими разработчиками на ранних этапах, и конечный пользователь вряд ли столкнется с чем-то, с чем разработчики еще не сталкивались. Другие основные платформы UNIX, такие как Solaris / SPARC и FreeBSD / Intel с Apache, также находятся там же.
SP: PHP обычно в паре с MySQL. Как много сотрудничества между двумя командами в плане развития?
RL: Мы очень хорошо знаем MySQL. Первый код базы данных на PHP был написан для предшественника MySQL под названием mSQL. MySQL API был полностью совместим с mSQL, когда он появился, поэтому с самого начала MySQL PHP имел хорошую поддержку для него. Сопряжение работает потому, что PHP и MySQL, как правило, используют минималистичный и очень прямой подход к решению проблем.
С точки зрения сотрудничества на уровне развития, на самом деле не так много. Но не так много нужно. PHP предоставляет тонкий слой, который просто предоставляет MySQL API пользователю PHP. Мы связываем клиентскую библиотеку MySQL с PHP, но эта библиотека полностью поддерживается командой MySQL с небольшим участием от нас — за исключением случаев, когда они, конечно, нарушают сборку.
SP: Как вы думаете, PHP становится заменой Perl?
Нет, Perl — это язык сценариев общего назначения. PHP специально предназначен для веб-проблемы.
SP: Как вы относитесь к Magic Quotes и Register Globals?
Р.Л .: Регистрация Globals — это одна из функций, которая привела людей в PHP. Простота создания веб-приложений, когда формы и другие переменные были автоматически доступны, не может быть побеждена.
Лично я не был сторонником отключения глобальных регистров по умолчанию. Это очень мало добавляет к общей безопасности приложения. Если люди не проверяют данные, поступающие от пользователя, то с включенными или не включенными глобальными регистрами приложение будет небезопасным.
Единственный раз, когда отключение Register Globals помогает, это когда вы забыли инициализировать переменную перед ее использованием, и кто-то, кто знает ваш код, использует это. Изменяя уровень сообщений об ошибках, вы можете сделать так, чтобы PHP автоматически находил для вас эти случаи. Итак, в конце концов, все, что я думаю, отключив Register Globals, сделало написание PHP приложений более сложным.
И, конечно, он также генерировал 10-20 вопросов / отчетов об ошибках в день от пользователей, которые не понимают этого изменения.
Magic Quotes проистекает из тех времен, когда PHP использовался почти исключительно для приложений на основе баз данных. Эти приложения будут принимать ввод данных и помещать их в базу данных. Даже сегодня большая часть сценариев PHP делает немного больше, чем это.
Вы всегда должны экранировать кавычки, прежде чем вставить строку в базу данных. Если вы этого не сделаете, вы получите ужасную ошибку SQL, и ваше приложение не будет работать. После объяснения этого простого факта людям в 50-й раз однажды я, наконец, сыт по горло и заставил PHP бежать на лету. Таким образом, приложения будут работать, и худшее, что может случиться, это то, что кто-то увидит дополнительное на экране, когда будет выводить данные напрямую, а не вставлять их в базу данных.
Часто люди даже не замечали этого, так как оно не приводило к фатальным ошибкам SQL, и, таким образом, я не получал запутанные электронные письма, спрашивающие меня, что происходит. Это было очень хорошо.
Даже сегодня вы все еще видите странный сайт, где очевидно, что автор не понимал, что данные должны быть экранированы перед вставкой в БД, и вы видите странные дополнения здесь и там. Каждое из них — это сообщение поддержки, на которое нам не нужно было отвечать.
Знающие люди, которым не нравится эта функция, могут просто отключить ее и справиться со всеми, кто спасается. А знающие, которые пишут переносимые приложения, могут просто проверить настройку с помощью get_magic_quotes_gpc () и добавить вызов addlashes (), когда это необходимо.
SP: Как вы думаете, существует ли удачный баланс между коммерческими и открытыми элементами сообщества PHP?
Р.Л .: Я думаю, что все в порядке. Различные коммерческие организации платят частным лицам за работу над частями PHP — и это приносит пользу всем.
SP: Какое самое удивительное или инновационное использование PHP вы видели в Интернете?
RL: Я продолжаю видеть новые и странные вещи, последним из которых является модуль ActiveScript SAPI от Wez Furlong, который позволяет вам делать PHP на стороне клиента следующим образом:
<html>
...
<script language="ActivePHP">
function clickit() {
$GLOBALS["window"]->open("http://www.php.net");
}
</script>
...
<img src="..." onclick="clickit();" />
</html>
PHPMole IDE Алана Ноулза для PHP, написанный на PHP-GTK, также впечатляет. Есть много других интересных вещей на PHP, но они, вероятно, самые далекие из того, что я начал делать.
Будущее PHP
SP: Есть ли какие-либо планы относительно серверных переменных с состоянием в PHP? Было бы полезно поместить созданные объекты в общую память, чтобы пользователям не приходилось нести большие накладные расходы из-за создания экземпляров классов.
RL: Проект Alternative PHP Cache (APC) уже может вставлять созданные экземпляры классов в общую память, так что один из них был решен APC и другими.
Лично я думаю, что если у вас действительно есть проблемы с производительностью, вы должны либо немного упростить свой код, либо взглянуть на написание критических частей на C. Расширение PHP на уровне C на самом деле намного проще, чем думает большинство людей.
SP: Текущие переменные ‘session’ используют дисковое пространство (например, /tmp
Есть ли планы исправить это?
RL: С самого первого дня поддержки сессий в PHP мы предоставили обработчик сессий бэкэнда с общей памятью. Просто установите ваш обработчик в mm
files
php.ini
Однако для сайтов с большим трафиком это не решение. Реальным решением является балансировка нагрузки сайта на нескольких серверах.
Наличие данных сеанса в памяти на одной машине ничего не решает. Для этого вы пишете себе обработчик сохранения сеанса и помещаете данные сеанса в какую-то центральную базу данных. Смотрите http://php.net/session_set_save_handler .
SP: А как насчет пула соединений с базой данных? Постоянные соединения недостаточно хороши — есть ли планы по внедрению пула соединений в будущем?
RL: Пул соединений должен принадлежать одному процессу. Поскольку большинство людей используют веб-сервер Apache, который является многопроцессорным сервером предварительной разветвленности, просто нет способа, которым PHP мог бы сделать это пул соединений. Это должно быть сделано отдельным автономным процессом и выходит за рамки самого PHP. И SQLRelay, и SRM могут быть использованы для решения этой проблемы.
Если / когда общая архитектура для PHP представляет собой однопроцессный многопоточный веб-сервер, мы могли бы рассмотреть возможность включения этой функциональности в сам PHP, но до этого дня это не имеет особого смысла. Даже Apache 2 по-прежнему будет многопроцессорным сервером, и каждый процесс может поддерживать несколько потоков. Таким образом, мы могли бы иметь пул соединений в каждом процессе.
С.П .: Есть ли планы по улучшению ООП? Пользователи считают, что в создании экземпляров классов должно быть меньше накладных расходов; и обеспечение инкапсуляции, чтобы они могли скрывать переменные-члены (способствует лучшему программированию). Есть ли планы на этот счет в трубопроводе?
Р.Л .: Да.
SP: Sybase и MS SQL Server обеспечивают поддержку нескольких наборов результатов, возвращаемых из хранимых процедур SQL. PHP не поддерживает это! Когда пользователи могут ожидать этого?
Р.Л .: Когда кто-то вносит код для этого.
SP: запросы к базе данных в настоящее время буферизируются в памяти, прежде чем становятся доступными для клиента. Могут ли программисты PHP ожидать, что это поведение изменится так, что запросы будут сразу же доступны при отправке строк с сервера, чтобы им не пришлось ждать?
Р. Л .: Когда различные API-интерфейсы для баз данных поддерживают это, они могут это сделать. Мы уже поддерживаем это с MySQL через вызов mysql_unbuffered_query () и уже довольно давно.
SP: ZendEngine2 планирует ряд новых интересных функций, таких как обработка исключений и расширенная поддержка ООП. Можете ли вы дать нам приблизительную оценку того, когда пользователи PHP могут ожидать релиз — по крайней мере, в месяцах или годах?
Р.Л .: Нет. Он будет выпущен, когда будет готов.
SP: Видите ли вы будущее в PHP-GTK с популярными настольными приложениями, написанными на PHP?
Р.Л .: Я вижу, что PHP-GTK в основном используется в тех случаях, когда вам нужно предоставить и веб-интерфейс, и интерфейс с графическим интерфейсом для одного и того же приложения. Возможность использовать один и тот же бэкэнд-код для обоих — большая победа.
SP: Сейчас разработка PHP и Apache идет параллельно? И возможно ли, что эти два проекта каким-то образом будут объединены в будущем?
Р.Л .: PHP и Apache всегда были достаточно тесно связаны, так как они являются частями головоломки, которая решает проблему Интернета. Таким образом, есть ряд разработчиков, которые работают над обоими проектами. Но нет, проекты точно не сольются. Это не имеет большого смысла.
SP: Как вы думаете, крупные корпорации будут использовать PHP в своих средах вместо J2EE и .NET в будущем?
Р.Л .: Некоторые делают, так что да.
SP: Что бы вы сказали молодым разработчикам, которые сами собираются начать проект с открытым исходным кодом?
Р.Л .: Я не уверен, что это возможно в этом смысле. Вроде как сидеть и смотреть на телефон, пытаясь заставить его звонить. Он всегда звонит, когда вы находитесь в душе или в другое неудобное время.
Я не думаю, что вы действительно садитесь и решаете начать проект с открытым исходным кодом. Это «движение» является мифом, который людям нравится очаровывать и приписывать всевозможные нереальные характеристики. Никто не собирается присоединяться к вашему проекту, если у вас есть крутая идея. У всех есть классные идеи.
Люди объединят ваши усилия, если вы создадите что-то достаточно полезное, чтобы им было проще взять ваш код и немного расширить его для решения своей проблемы. Если ваши вещи наполовину испечены, то люди, скорее всего, откажутся от того, что вы сделали, и просто решат свою проблему сами или с помощью чего-то еще.
Итак, чтобы начать проект с открытым исходным кодом, сначала предположим, что вы полностью по своему усмотрению, и решите какую-то проблему, которая вас давно беспокоила. Это означает месяцы и месяцы работы, чтобы получить что-то, что действительно работает и решает проблему. В этот момент вы можете начать думать о том, хотите ли вы отказаться от контроля и позволить другим присоединиться к вашим усилиям.
Ключевая фраза здесь «отказаться от контроля». Запуск проекта с открытым исходным кодом не означает, что вы внезапно получите штат программистов, с которыми вы сможете работать. Фактически, чтобы получить его с нуля, вы должны быть очень восприимчивы к предложениям первых пользователей и делать все возможное, чтобы сделать ваш инструмент более полезным для более широкой аудитории. А затем вы отдаете все это и позволяете людям делать с вашим кодом практически все, что они хотят. Теперь вы начали проект с открытым исходным кодом.
SP: Какие еще инициативы с открытым исходным кодом вы запланировали? Учитывая бесконечное время (и 100 дополнительных пар рук), что бы вы любили делать?
Р.Л .: Ну, я не планировал PHP. Я думаю с точки зрения решения проблем, а не с точки зрения программных проектов. Я на самом деле ненавижу программирование, но я люблю решать проблемы. Итак, какие проблемы я бы хотел решить, если бы у меня было много времени и ресурсов?
Недавно став отцом, у меня были грандиозные планы по созданию умной кроватки. Живое видео, аудио и различные другие гаджеты, которые можно просматривать и контролировать удаленно, чтобы позволить удаленным друзьям и семье взаимодействовать с ребенком. Конечно, как только ребенок действительно прибыл, найти достаточно времени, чтобы просто сидеть и читать книгу, практически невозможно, не говоря уже о том, чтобы построить умную кроватку!
Еще один действительно крутой проект — это система построения дистрибутивов. Один, где я мог указать, что у меня есть устройство с процессором 80486, определенным типом NIC, и какими-либо другими аппаратными особенностями наряду с типом носителя и оперативной памяти, и эта штука вывела бы небольшой дистрибутив Linux, специально предназначенный для моего устройства. ,
Затем, чтобы расширить это, можно сказать, что я хочу, чтобы он действовал как брандмауэр, mp3-сервер, станция просмотра или что-то еще. По сути, вы можете взять практически любое аппаратное устройство, вставить в него Linux и сделать его полезным. У меня есть много устройств в доме, которые, я знаю, я могу использовать лучше, просто добавив на них более мощное программное обеспечение, и я хотел бы найти способ сделать это, не тратя на них по 6 месяцев.
Â
Сообщество SitePoint и я хотели бы воспользоваться этой возможностью, чтобы поблагодарить Расмуса за его время и подробные ответы на вопросы у нашего сообщества. Возможно, он больше не является контролирующей силой в PHP, но он определенно сияет как член команды, которая работает вместе по всему миру, чтобы вывести PHP на новый уровень.