Quixote: Python-фреймворк, который не умирает

Саймон Уиллисон (Simon Willison) — один из создателей Django и известный технический блогер — на прошлой неделе опубликовал короткую, но примечательную заметку. Он обратил внимание на кое-что неожиданное: некоторые «старожилы» Python-веб-разработки будут рады узнать, что последний коммит в репозиторий фреймворка Quixote был сделан всего шесть часов назад.

Казалось бы, ничего особенного. Но есть важный контекст: самый старый коммит в этом репозитории датируется 21 годом назад — это был первоначальный импорт Quixote 2.4 из Subversion в Git.

Другими словами, проект, рождённый в начале 2000-х годов, до сих пор живёт и обновляется. Это само по себе — история.


Что такое Quixote?

Quixote — это лёгкий и гибкий веб-фреймворк (web application framework) для Python, ориентированный на разработчиков, которые хотят строить и поддерживать сложные веб-приложения преимущественно средствами самого Python, без специализированных языков шаблонов или конфигурации. Он позволяет организовывать сайты как стандартные Python-пакеты и модули, где URL напрямую отображаются на вызываемые функции или методы.

Quixote сопоставляет URL с функцией или методом внутри Python-пакета; функция вызывается с содержимым HTTP-запроса, и результаты возвращаются клиенту.

Проще говоря: если вы воспринимаете сайт как программу, а страницы — как подпрограммы, Quixote создан именно для вас.

ℹ Что такое PTL?
Quixote включает PTL (Python Template Language) — язык шаблонов на Python для генерации HTML. PTL инвертирует привычную модель: вместо встраивания Python-кода в HTML-шаблоны, он упрощает генерацию длинных текстовых строк (например, HTML-документов) прямо из Python-кода. При этом использование PTL в приложениях на Quixote не является обязательным.

История: от MEMS Exchange до GitHub

Quixote был разработан около 2000 года командой, в которую входили Andrew Kuchling, Neil Schemenauer и Greg Ward из организации MEMS Exchange — сети для производства полупроводников. Фреймворк возник из потребности в более простой альтернативе таким решениям, как Zope, с акцентом на продуктивность программиста и отсутствие «магического» поведения.

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

Ключевым этапом стал переход проекта на репозиторий GitHub, которым управляет Neil Schemenauer (под ником nascheme), что открыло возможность для непрерывного сотрудничества в открытом исходном коде после завершения работы в MEMS Exchange.

Философия Quixote с самого начала была радикальной: никакой магии. Если фреймворк не понимает, что делать — он отказывается угадывать и выбрасывает исключение.


Хронология проекта


timeline
    title История фреймворка Quixote
    section Ранние годы
        2000 : Разработка в MEMS Exchange (Kuchling, Schemenauer, Ward)
        2005 : Quixote 2.4 — первый коммит в Git (экспорт из SVN)
    section Развитие
        2008 : Quixote 2.5–2.6, переход на MIT/X лицензию
        2020 : Стабильный релиз 3.2
    section Современность
        2025 : Версия 3.7 (требует Python 3.8+)
        2026 : Версия 3.8 — свежий коммит в июле


Почему проект жив в 2026 году?

Обслуживание Quixote демонстрирует низкую, но стабильную активность на GitHub на протяжении всех 2020-х годов: коммиты касаются совместимости с Python 3.10 и более поздними версиями, а также обновлений инструментов разработки — таких как ruff для линтинга и black для форматирования кода.

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

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

💡 Урок для open source
Quixote — живое свидетельство того, что у программного проекта нет “срока годности”. Если сообщество, пусть даже небольшое, продолжает использовать и поддерживать инструмент, он может пережить целые поколения более модных альтернатив.

Quixote vs. современные Python-фреймворки

ФреймворкГод созданияФилософияПопулярность (звёзды на GitHub)Статус
Quixote~2000Python-ориентированный, без магии~93 ⭐Активно поддерживается
Django2003«Всё включено» (batteries included)>80 000 ⭐Активно поддерживается
Flask2010Микрофреймворк, максимальная гибкость>68 000 ⭐Активно поддерживается
FastAPI2018Асинхронный, для API>75 000 ⭐Активно поддерживается

Сообщество вокруг Quixote остаётся скромным — по данным на конец 2025 года, репозиторий имел 93 звезды и 13 форков на GitHub. Тем не менее проект сохраняет активность для нишевых приложений, ценящих его лёгкую структуру и шаблонизатор PTL.


Контекст: эпоха Python-веба

Чтобы оценить масштаб этой истории, нужно вспомнить, каким был мир Python-веб-разработки в начале 2000-х.

Django был создан осенью 2003 года, когда веб-программисты газеты Lawrence Journal-World — Адриан Головаты и Саймон Уиллисон — начали использовать Python для создания приложений. Он был опубликован под лицензией BSD в июле 2005 года.

То есть Quixote появился раньше Django — и пережил его пришествие, эпоху Flask, революцию async и взлёт FastAPI.

📝 Быстрый старт с Quixote

Установить и попробовать Quixote можно в несколько шагов:

# Установка через pip
pip install quixote

# Запуск встроенного мини-демо
python -m quixote.demo.mini_demo

В браузере откройте http://localhost:8080 — и вы увидите работающее Quixote-приложение.

Пример простейшего приложения на Quixote:

from quixote.publish import Publisher
from quixote.directory import Directory

class RootDirectory(Directory):
    _q_exports = ['']

    def _q_index(self):
        return '<html><body><h1>Привет от Quixote!</h1></body></html>'

def create_publisher():
    return Publisher(RootDirectory(),
                     display_exceptions='plain')

Видите? Никаких декораторов, никакой магии — только чистый Python. Именно это и было задумано 25 лет назад.


Что это значит для разработчика?

Если смотреть вперёд, будущее Quixote строится на последнем релизе с потенциалом для дальнейших улучшений в области WSGI- и ASGI-интерфейсов, а также интереса в контексте микросервисов — благодаря стабильной экосистеме и продолжающимся вкладам сообщества.

Конечно, никто не посоветует начинать новый проект с Quixote, если вам нужна поддержка сообщества, готовые плагины и экосистема. Для этого есть Django, FastAPI и Flask. Но история Quixote поднимает важный вопрос: насколько «мёртвые» фреймворки на самом деле мертвы?

⚠ Прежде чем выбирать нишевый фреймворк

Если вы рассматриваете Quixote или другой «исторический» фреймворк для нового проекта, убедитесь что:

  • Размер и активность сообщества достаточны для ваших нужд
  • Совместимость с актуальными версиями Python поддерживается
  • Документация актуальна
  • Есть понимание, кто будет поддерживать зависимости в будущем

Итог

Заметка Саймона Уиллисона коротка, но точна: один свежий коммит в старом репозитории — это маленькое, но реальное событие. Для «нерда со стажем», который писал веб-приложения на Python ещё до того, как Django появился на сцене, это — приятный сигнал. Что-то из прошлого живёт.

Quixote — не просто строчка в истории технологий. Это пример того, что в open source не существует понятия «устарело», пока есть хотя бы один человек, которому это нужно, и который готов поддерживать код.

Лучший код — тот, который работает. И иногда он работает 25 лет подряд.