Джеймс Гослинг, главный инженер и архитектор языка программирования и платформы Java, входит в команду Sun с 1984 г. С самого начала своей работы в фирме Sun Microsystems (Пало-Альто, шт. Калифорния) Гослинг принимал участие в создании распределенных вычислительных систем. Один из его последних крупных проектов - спецификация Real Time Specification for Java, завершенная в ноябре прошлого года (www.rtj.org). До прихода в Sun он занимался многопроцессорной версией Unix, оригинальной оконной системой и инструментарием Andrew, а также разработкой нескольких компиляторов и почтовых систем. С ним побеседовал технологический редактор eWeek Питер Коффи. eWeek: В онлайновом опросе мы спрашивали читателей, что станет преобладающей платформой для развертывания Web-сервисов. Более 1600 полученных ответов поделились почти поровну между Visual Studio .Net и J2EE (Java 2 Enterprise Edition). Во-первых, правомерно ли сравнивать их? Во-вторых, каков ваш взгляд на этот вопрос?

Джеймс Гослинг: “Разрабатывайте больше API”

Джеймс Гослинг: По-моему, несколько странно, что .Net повсеместно получает примерно половину голосов после того, как J2EE уже заняла подобающее ей место. Это платформа, которая используется людьми. Возможно, я сбиваюсь на ехидные замечания, но только для примера - раздел безопасности в спецификации Simple Object Access Protocol практически пуст. Сравнивать J2EE и .Net непросто. Под маркой J2EE скрывается целая коллекция разных технологий. Более крупные и продвинутые системы задействуют их в полном комплекте, но основная масса пользователей довольствуется лишь развертыванием Java Server Pages и СУБД, хранящей базу данных в ОЗУ. Люди работают с тем, что подходит для решения их конкретных проблем.

Честно говоря, я не вправе категорически оценивать .Net, но совершенно уверен, что вопрос о выборе - или .Net, или J2EE - в повестке дня сегодня не стоит. Главным принципом Java-мира является модульность, возможность подключения и отключения компонентов, и все его API реально способны работать совместно. Я бы сказал, что J2EE предназначается для общего рынка, в то время как .Net - продукт одной корпорации. eWeek: Один из часто задаваемых вопросов: в какой степени Sun контролирует или, наоборот, не контролирует значимые аспекты платформы Java. Что вы могли бы сказать по этому поводу?

Д. Г.: Sun играет активную роль в разработке самых разнообразных API, но мы тесно сотрудничаем с очень многими группами, имеющими опыт в различных сферах технологии. eWeek: Будете ли вы предлагать новые API? Если да, то в каких областях?

Д. Г.: Новые API - это фундамент дальнейшего роста Java. Одна из самых удивительных вещей состоит в том, что очень сложно выделить интересные направления. Например, есть люди, создающие API для управления гигантскими телескопами; они в этом очень заинтересованы, но составляют лишь миллионную часть Java-сообщества.

Здесь трудно провести четкие грани, и Java 2 Micro Edition на карманном устройстве часто взаимодействует с J2EE в серверной системе. Тут все взаимосвязано.

Явной точкой роста является мобильная аппаратура. На прошлогодней конференции JavaOne очень многие увлеченно говорили о реальных перспективах выпуска сотовых J2ME-телефонов. И сегодня, после года работы, дело пошло на лад. eWeek: Если оценить все сделанное благодаря Java с момента рождения этой платформы, то в чем вы видите наиболее крупные достижения?

Д. Г.: Безусловно, Java прекрасно справляется с разнородностью систем: Java можно использовать для исполнения всех видов процессов на всех видах машин. Хорошо решены проблемы безопасности. Далее упомяну про надежность, продуктивность труда разработчиков и масштабируемость решений; ведь когда мы говорим “от смарт-карт до суперкомпьютеров”, это отнюдь не рекламный слоган. eWeek: Из перечисленного вами, что, на ваш взгляд, больше всего недооценивают?

Д. Г.: Продуктивность разработок. Программисты знают, что она возрастает почти вдвое, но никто из занимающихся маркетингом практически ничего об этом не говорит. eWeek: Почему на это так мало обращают внимания? Разве затраты на создание ПО - единственный вид ИТ-затрат, которые растут со временем?

Д. Г.: Это болезненный вопрос. Некоторые вещи, например гетерогенность среды, волнуют ИТ-менеджеров куда больше. Это довольно странно. Дантисты, врачи или плотники вкладывают деньги в хорошие инструменты, но разработчики не осознают нужды в таких инвестициях. На компании, занимающиеся средствами разработки, постоянно давит ценовой пресс - рынок ждет, что эти инструменты будут бесплатными или почти бесплатными, что создает трудности для бизнеса. Программисты тратят больше денег на всякую ерунду, чем на свой инструментарий. eWeek: Ряд приверженцев .Net утверждает, что Java-платформа слишком стеснена языком Java. Ваш ответ?

Д. Г.: Java Virtual Machine (виртуальная машина Java) поддерживает разные языки. Многие из коммерческих компиляторов Ada ориентированы на JVM, и их используют в некоторых оборонных проектах. Мы поддерживаем всевозможные языки - но это вовсе не значит, что мы намерены и в дальнейшем поддерживать их все без исключения. Эта селективная поддержка связана с вопросами оправданности их применения с точки зрения безопасности. Есть ряд серьезных оснований не поддерживать языки Си и C++. Их поддержка привела бы вас к неограниченным возможностям операций с указателями. Тогда с безопасностью придется распрощаться. То же можно сказать и о вопросах надежности, и все это снова приведет нас к проблеме обеспечения безопасности, только с другого направления. eWeek: Как вы смотрите на состояние безопасности приложений?

Д. Г.: Есть два вида проблем безопасности. Первые возникают, когда люди по собственной глупости не внимают тому, что им говорят. Например, Outlook - это настоящая чашка Петри для вирусов. Я не знаю, зачем им пользуются.

Остальные проблемы порождаются в основном дефектами ПО, зачастую это ошибки, связанные с целостностью памяти; многие из них обусловлены переполнением массивов. В Java ничего этого нет. Вот вы только что говорили о недооцениваемых качествах платформы, а ведь в JVM имеется верификатор. В каком-то смысле он осуществляет доказательство теоремы и подтверждает, что программа действительно имеет определенные свойства.

Он также устанавливает целостность интерфейсов. Если вы знаете, каковы ваши интерфейсы, то можете изменять начинку объектов, не ломая того, что есть.