Политкорректность учитывается даже в языках программирования. На прошлой неделе Python-разработчик Виктор Стиннер (Victor Stinner) из Red Hat прислал четыре пул-реквеста на переименование потенциально оскорбительных терминов master/slave (хозяин/раб) в документации и коде Python. Автор предложил заменить их социально нейтральными словами, не оскорбляющими людей, чьи предки были настоящими рабами. В качестве возможной альтернативы есть термины parent/worker.
Предлагаемое изменение — не какая-то прихоть одного разработчика, а общая тенденция для разных языков программирования и технологий. Стиннер привёл примеры аналогичных изменений в Redis, Drupal, CouchDB и Django. Так, Django и CouchDB заменили термины master/slave на leader/follower.
При этом Стиннер высказал мнение, что «рабовладельческую» терминологию всё-таки можно оставить для некоторых терминов, таких как ветка master в Git, веб-мастер и postmaster.
Развернулась жаркая дискуссия.
Поиск по кодовой базе python/cpython находит многочисленные включения «оскоробительных» терминов master и slave рядом друг с другом, в том числе в библиотеках pty и openpty.
Например, вот код Lib/pty.py:
Виктор Стиннер говорит, что «поступали жалобы» на такую терминологию, но они высказывались в частном порядке, а не публично, чтобы избежать ругани.
В обсуждении проблемы коллеги обращают внимание, что документация Python не дублирует документацию Linux — а именно оттуда идёт использование терминов master/slave для многих функций. Таким образом, если согласиться на переименование только для Python, то это приведёт к отклонению от общепринятого стандарта Linux. Грубо говоря, одни и те же функции документация Python и Linux будет описывать разными словами. Коллеги предлагают отказаться от изменений «вторичной» документации Python до тех пор, пока соответствующие изменения не будут внесены в документацию Linux.
Внимание разработчиков привлекают в первую очередь такие участки кода и терминологии, где слова «хозяин» и «раб» встречаются рядом друг с другом. Если же master упоминается изолированно, то эти фрагменты можно оставить в неприкосновенности. Например, в модуле doctest есть обозначение doctest.master:
По мнению Виктора Стиннера, это уже выглядит не слишком оскорбительно.
Автор нашёл множество случаев, где упоминается «унизительная лексика». Например, в nntplib.NNTP() есть метод slave(), который отправляет команду slave на сервер. Данное исправление потребует изменений протокола NNTP, а именно раздела 3.12 (команда SLAVE), пишет Стиннер.
Другой пример — атрибут mbuf.master обект PyMemoryViewObject в программных интерфейсах C API:
В общем, master и slave встречаются буквально повсюду. Виктор Стиннер предложил ряд патчей, которые местами исправляют ситуацию. Таким образом, в версии Python 3.8 термины master/slave будут встречаться реже.
Теоретически, в отдельных случаях проблему можно решить, не отказываясь от устоявшейся терминологии. Например, разработчики Redis предложили оригинальный выход из ситуации: с версии 1.0.0 там поддерживается команда SLAVEOF NO ONE, которая превращает сервер-slave в сервер-master. Хуже, если соответствующих изменений в синтаксисе потребуют власти. Предпосылки к этому уже есть. Например, в 2003 году отдел закупок департамента внутренних сервисов округа Лос-Анджелес разослал производителям электроники и бытовой техники уведомление с просьбой избегать терминов master/slave в описании своей продукции.
В 2004 году группа мониторинга Global Language Monitor назвала master/slave самым политически некорректным термином года. В технологической индустрии эти слова употребляются очень давно и стали частью многочисленных стандартов, в том числе RFC 977 от 1986 года.
По поводу пулл-реквестов Виктора Стиннера начались споры, которые полностью отражают аргументы убеждённых противников и сторонников политкорректности — такие споры ведутся на разных форумах. Конец дискуссии положил сам Гвидо ван Россум, который формально уже отошёл от дел, но присматривает за своим детищем Python. Он смерджил три из четырёх предложенных пул-реквеста, а четвёртый отверг, потому что он отражает оригинальную терминологию pty из UNIX.
Заметим, что «оскорбительная» терминология по историческим причинам стала частью современного языка и вряд ли от неё можно полностью избавиться. Например, Дэвид Гребер в книге «Долг: первые 5000 лет истории» приводит пример понятий “dominium” (доминиум) и “familia” (семья):
То есть даже слова «семья», «фамилия» или понятие частной собственности можно считать неполиткорректными по такой логике: все они имеют отношение к рабству. Эти понятия вошли в современные языки со многими словами, о происхождении которых люди обычно не задумываются. Есть повод оскорбиться и у славян.
Предлагаемое изменение — не какая-то прихоть одного разработчика, а общая тенденция для разных языков программирования и технологий. Стиннер привёл примеры аналогичных изменений в Redis, Drupal, CouchDB и Django. Так, Django и CouchDB заменили термины master/slave на leader/follower.
При этом Стиннер высказал мнение, что «рабовладельческую» терминологию всё-таки можно оставить для некоторых терминов, таких как ветка master в Git, веб-мастер и postmaster.
Развернулась жаркая дискуссия.
Поиск по кодовой базе python/cpython находит многочисленные включения «оскоробительных» терминов master и slave рядом друг с другом, в том числе в библиотеках pty и openpty.
Например, вот код Lib/pty.py:
STDIN_FILENO = 0
STDOUT_FILENO = 1
STDERR_FILENO = 2
CHILD = 0
def openpty():
"""openpty() -> (master_fd, slave_fd)
Open a pty master/slave pair, using os.openpty() if possible."""
try:
return os.openpty()
Виктор Стиннер говорит, что «поступали жалобы» на такую терминологию, но они высказывались в частном порядке, а не публично, чтобы избежать ругани.
В обсуждении проблемы коллеги обращают внимание, что документация Python не дублирует документацию Linux — а именно оттуда идёт использование терминов master/slave для многих функций. Таким образом, если согласиться на переименование только для Python, то это приведёт к отклонению от общепринятого стандарта Linux. Грубо говоря, одни и те же функции документация Python и Linux будет описывать разными словами. Коллеги предлагают отказаться от изменений «вторичной» документации Python до тех пор, пока соответствующие изменения не будут внесены в документацию Linux.
Внимание разработчиков привлекают в первую очередь такие участки кода и терминологии, где слова «хозяин» и «раб» встречаются рядом друг с другом. Если же master упоминается изолированно, то эти фрагменты можно оставить в неприкосновенности. Например, в модуле doctest есть обозначение doctest.master:
# For backward compatibility, a global instance of a DocTestRunner
# class, updated by testmod.
master = None
По мнению Виктора Стиннера, это уже выглядит не слишком оскорбительно.
Автор нашёл множество случаев, где упоминается «унизительная лексика». Например, в nntplib.NNTP() есть метод slave(), который отправляет команду slave на сервер. Данное исправление потребует изменений протокола NNTP, а именно раздела 3.12 (команда SLAVE), пишет Стиннер.
Другой пример — атрибут mbuf.master обект PyMemoryViewObject в программных интерфейсах C API:
typedef struct {
PyObject_HEAD
int flags; /* state flags */
Py_ssize_t exports; /* number of direct memoryview exports */
Py_buffer master; /* snapshot buffer obtained from the original exporter */
} _PyManagedBufferObject;
/* memoryview state flags */
#define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */
#define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */
#define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */
#define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */
#define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */
typedef struct {
PyObject_VAR_HEAD
_PyManagedBufferObject *mbuf; /* managed buffer */
Py_hash_t hash; /* hash value for read-only views */
int flags; /* state flags */
Py_ssize_t exports; /* number of buffer re-exports */
Py_buffer view; /* private copy of the exporter's view */
PyObject *weakreflist;
Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */
} PyMemoryViewObject;
В общем, master и slave встречаются буквально повсюду. Виктор Стиннер предложил ряд патчей, которые местами исправляют ситуацию. Таким образом, в версии Python 3.8 термины master/slave будут встречаться реже.
Теоретически, в отдельных случаях проблему можно решить, не отказываясь от устоявшейся терминологии. Например, разработчики Redis предложили оригинальный выход из ситуации: с версии 1.0.0 там поддерживается команда SLAVEOF NO ONE, которая превращает сервер-slave в сервер-master. Хуже, если соответствующих изменений в синтаксисе потребуют власти. Предпосылки к этому уже есть. Например, в 2003 году отдел закупок департамента внутренних сервисов округа Лос-Анджелес разослал производителям электроники и бытовой техники уведомление с просьбой избегать терминов master/slave в описании своей продукции.
В 2004 году группа мониторинга Global Language Monitor назвала master/slave самым политически некорректным термином года. В технологической индустрии эти слова употребляются очень давно и стали частью многочисленных стандартов, в том числе RFC 977 от 1986 года.
По поводу пулл-реквестов Виктора Стиннера начались споры, которые полностью отражают аргументы убеждённых противников и сторонников политкорректности — такие споры ведутся на разных форумах. Конец дискуссии положил сам Гвидо ван Россум, который формально уже отошёл от дел, но присматривает за своим детищем Python. Он смерджил три из четырёх предложенных пул-реквеста, а четвёртый отверг, потому что он отражает оригинальную терминологию pty из UNIX.
Заметим, что «оскорбительная» терминология по историческим причинам стала частью современного языка и вряд ли от неё можно полностью избавиться. Например, Дэвид Гребер в книге «Долг: первые 5000 лет истории» приводит пример понятий “dominium” (доминиум) и “familia” (семья):
Что касается понятия “dominium”, то оно происходит от слова “dominus”, которое означает «хозяин», или «рабовладелец», но восходит к слову “domus”, т. е. «дом», или «хозяйство». С этим связан английский термин “domestic” («домашний»), который даже сегодня может использоваться в значении «относящийся к частной жизни» или же обозначать слугу, убирающего дом. “Domus” перекликается со словом “familia”, т. е. «семья», но “familia” происходит от слова “famulus”, т. е. «раб». Изначально под семьёй понимались все люди, находившиеся под домашней властью “pater familias”, которая была, по крайней мере в раннем римском праве, абсолютной.
У мужчины не было полной власти над женой, поскольку она до некоторой степени по-прежнему оставалась под защитой своего отца, но с детьми, рабами и другими зависимыми людьми он мог делать все, что ему вздумается, — во всяком случае, в раннем римском праве он был волен их пороть, пытать или продавать. Отец мог даже казнить своих детей, если обнаруживал, что они совершили тяжкое преступление. А если дело касалось рабов, то ему не требовалось и этого предлога.
Создавая понятие “dominium”, которое легло в основу современного принципа частной собственности, римские юристы обратились к принципу домашней власти, полной власти над людьми, определили некоторых из этих людей (рабов) как вещи, а затем распространили логику, которая изначально применялась по отношению к рабам, на гусей, колесницы, амбары, ювелирные шкатулки и т. д., то есть на любую вещь, имеющую отношение к праву.
То есть даже слова «семья», «фамилия» или понятие частной собственности можно считать неполиткорректными по такой логике: все они имеют отношение к рабству. Эти понятия вошли в современные языки со многими словами, о происхождении которых люди обычно не задумываются. Есть повод оскорбиться и у славян.
«Весьма неполиткорректно присваивать типы объектам до момента их создания!
Мы не должны навязывать объектам, кем им быть, а кем — нет.
Объект может сам решить, какого он типа, прямо в рантайме. Более того, он вправе изменить свой тип, если почувствует к этому внутреннюю расположенность.
Сегрегация объектов по их типу должна быть запрещена на законодательном уровне, покуда не станет интернированной социальной нормой каждого кодера.
Всем объектам на уровне операционной системы должны быть гарантированы равные возможности и по первому требованию предоставлены равные права.
Пока системы далеки от совершенства, стоит предусмотреть в них обязательные квоты для объектов каждого типа и следить за их неукоснительным соблюдением».
— комментарий fukkit