| | Из решения апелляционного суда Бетти Флетчер, окружной судья
Мы начнем с выяснения вопроса о том, что такое исходный код. "Исходным кодом", по крайней мере, как его сегодня понимают компьютерные программисты, называется текст программы, написанный на языке программирования "высокого уровня", таком, как Pascal или C. Отличительной чертой исходного кода является то, что он предназначен для чтения и понимания людьми и что он может быть использован для выражения некоторой идеи или метода. Компьютер, фактически, не может использовать напрямую исходный код, пока тот не переведен ("скомпилирован") на "низкоуровневый" или "машинный" язык и не превращен в "объектный код". То, что исходный код предназначен для чтения и понимания людей, не означает, однако, того, что его может понимать непрофессионал. Поскольку исходному коду уготована судьба быть перемолотым автоматическим, безжалостным и понимающим все буквально переводчиком, компилятором, программист должен строго следовать правилам грамматики, синтаксиса, формата и пунктуации. Соответственно, свободно понимать исходный код могут только те, кто знает программирование. (Примечание. Следует, однако, подчеркнуть, что исходный код представляет собой просто текст, хотя и текст, который следует строгим требованиям к формату и пунктуации. Например, ниже приведен отрывок из исходного кода [программы] Shuffle Бернстайна:
for (; ;) (uch = gtchr(); if (!(n & 31)) (for (i = 0; i64; i++) l [ ctr[i] ] = k[i] + h[n - 64 + i] Hash512 (wm, wl, level, 8);) В форме исходного кода Shuffle достаточно компактна; исходный код Shuffle умещается менее чем на четырех печатных страницах. Конец примечания.) Для нас также важно понять, как исходный код используется в области криптографии. Бернстайн представил ряд свидетельств криптографов и компьютерных программистов, поясняющих, что криптографические идеи и алгоритмы удобно выражать посредством кода. (Примечание. Способность исходного кода передавать алгоритмическую информацию продемонстрирована в торжественном заявлении профессора MIT Харольда Эбелсона (Harold Abelson): - Квадратный корень числа X - это число Y, такое, что Y, умноженное на Y, равно X. Это - [пример] декларативного знания. Оно сообщает нам нечто о квадратных корнях. Но оно ничего не сообщает о том, как найти квадратный корень. По контрасту, рассмотрим следующий древний алгоритм, приписываемый Хирону Александрийскому, для аппроксимации квадратных корней: Для аппроксимации квадратного корня положительного целого числа X:возьмите число наугад,улучшите догадку, приравняв ее к среднему догадки и разности X и догадки,повторяйте улучшение, пока не достигните приемлемой точности. Метод Хирона ничего не сообщает о том, что такое квадратные корни, однако он сообщает, как аппроксимировать их. Это - пример императивного "how-to" знания. Информатика занята формализацией императивного знания - разработкой формальной нотации и способов размышлять и рассуждать о методах. Вот как формализуется метод Хирона в нотации компьютерного языка LISP:
(define (sqrtx) (define (good-enough? guess) ((abs (- (square guess) x)) tolerance)) (define (improve guess) (average guess (/ x guess))) (define (try guess) (if (good-enough? guess) guess (try (improve guess)))) (try 1)) Конец примечания.) То, что это так, не кажется, по размышлении, странным. Как уже замечено, основная задача криптографов - разработка надежных методов шифрования. Описание таких систем на повседневном английском или с использованием общематематической терминологии может быть полезно, но вся соль - по крайней мере, для криптографов - часто в подробностях. Используя исходный код, криптограф может выразить алгоритмические идеи с точностью и методической строгостью, с трудом достижимыми другими методами. Исходный код также обладает тем преимуществом, что способствует экспертной оценке (peer review), поскольку, скомпилировав исходный код, [другой] криптограф может получить действующую модель, к которой приложимы строгие тесты на надежность. Потребность в точном формулировании гипотез и формализованных эмпирических тестах, разумеется, специфична не только для криптографической науки; однако похоже, что в этой области предпочтительным средством ее удовлетворения является исходный код. Следовательно, криптографы используют исходный код для выражения своих научных идей практически так же, как математики используют уравнения или экономисты - графики. Разумеется, и математические уравнения, и графики используются и в других областях для различных целей, не все из которых являются экспрессивными. Но математики и экономисты выбрали эти способы выражения для того, чтобы способствовать точному и строгому выражению сложных научных идей. Подобным образом неопровергнутое свидетельство говорит о том, что криптографы используют исходный код таким же образом. В свете этих соображений мы заключаем, что шифровальное программное обеспечение в форме исходного кода, используемое в сфере криптографии, должно рассматриваться как экспрессивное в смысле Первой поправки и, следовательно, подлежащее защите доктрины предварительного ограничения. Если бы правительство потребовало от математиков получать лицензию на то, чтобы публиковать материал, содержащий математические уравнения, такой режим, без сомнения, требовал бы анализа на предмет предварительных ограничений [свободы слова]. Более того, доступность других средств выражения не умаляет цензорской силы такого ограничения: то, что Адам Смит (Adam Smith) написал "Богатство народов" не прибегая к уравнениям и графикам, совершенно не оправдывало бы правительственной предварительной цензуры экономической литературы, содержащей эти экспрессивные средства. Правительство, фактически, не оспаривает серьезно того, что исходный код используется криптографами в экспрессивных целях. Правительство настаивает, скорее, на том, что исходный код отличается от других форм выражения (таких, как чертежи, рецепты, учебные руководства), поскольку он может использоваться непосредственно для управления компьютером без передачи информации пользователю. С точки зрения правительства, указание на это уникальное функциональное качество исходного кода, а не на содержание идей, которые могут им выражаться, позволяет экспертным ограничениям обходить требования Первой поправки. Такая аргументация ошибочна, по крайней мере, по двум причинам. Во-первых, не очевидно, что точка зрения правительства отражает правильное понимание [сущности] исходного кода. Как отмечено ранее, отличительной особенностью исходного кода является то, что он предназначен для чтения и понимания людей, и что он не может быть использован для непосредственного управления компьютером. Хотя исходный код, будучи подготовлен надлежащим образом, может быть легко скомпилирован пользователем в объектный код, игнорирование различия между исходным и объектным кодом затемняет тот факт, что исходный код не предназначен исключительно для компьютера, но написан на языке, разработанном также и для анализа и понимания людьми. Во-вторых, - и это более важно - аргументация правительства, если выделить ее сущность, предполагает, что даже одна капля "прямой фукциональности" перевешивает любую конституционную защиту, которую имел бы [определенный способ] выражения в противном случае. Такого не бывает. Такое различение, на котором настаивает правительство, имело бы слишком широкую область действия в нашу эпоху стремительно развивающихся возможностей компьютеров. То, что компьютеры скоро будут способны реагировать непосредственно на устные команды, например, не наделяет правительство неограниченной властью налагать предварительные ограничения на [устную] речь в попытке контролировать ее "функциональные" аспекты. Первая поправка касается [свободы] выражения, и мы отвергаем представление о том, что примесь функциональности с необходимостью выводит [свободу способа] выражения из-под конституционной защиты. | |