Compartilhar via


[Build 2014] 마이크로소프트의 개방성과 상호운용성

지난 4월2일부터 4월4일까지 3일간 샌프란시스코에서는 빌드(Build) 2014라는 마이크로소프트의 개발자 컨퍼런스가 개최되었습니다. 빌드는 2011년부터 매해 마이크로소프트의 주요 제품과 더불어 개발자를 위한 미래전략을 소개하고, 개발자들을 위한 백여 개 이상의 기술 세션으로 구성되는데 올해에는 그 어느 때보다 풍성하고 파격적인 내용들로 가득 채워졌습니다. 본고에서는 이번 빌드에서 소개된 다채로운 내용 중 마이크로소프트의 개방성과 상호운용성에 대한 내용을 중심으로 살펴볼까 합니다.

마이크로소프트의 오픈 소스에 대한 기본적인 시각은 모든 산업 전반에 걸쳐 다양한 고객과 파트너들이 오픈 소스를 활용함으로써 개발자와 파트너 생태계를 더욱더 풍성하고 안정적으로 만들 수 있다는 것입니다.

마이크로소프트는 All-In-One Code Framework, Silverlight, OData SDK for PHP, .NET Micro Framework Development, PHP 5.3 on Windows 등 셀 수 없을 만큼 다양한 프로젝트를 오픈 소스의 형태로 개발하고 있습니다. 실제로 Codeplex.com과 같은 사이트를 통해서 10,000개의 서버 관련 소스, 1,400개의 SharePoint 소스, 1,500개 이상의 SQL 관련 소스, 3,000개 이상의 윈도우 관련 소스가 오픈 소스의 형태로 개발되고 있습니다. 마이크로소프트는 또한 OSS와의 상호 운용을 위해서 400대 이상의 서버와, 340개 이상의 서버에 리눅스를 보유한 소프트웨어 랩을 운용하고 있으며, 다양한 OSS 관련 연구와 테스트에 활용하고 있습니다.

Microsoft Azure와 같은 클라우드 플랫폼은 상호 운용성이 그 본질이라고 할 수 있을 만큼 중요하다고 하겠습니다. Azure 플랫폼은 Java, PHP, Node, Python, Ruby, .NET 등 중요 개발 언어를 모두 지원하고 있으며, 윈도우뿐 아니라, Canonical UBUNTU, CENTOS by Open Logic, Oracle Linux, SUSE Linux, openSUSE에 이르기 까지 다양한 리눅스 배포판을 지원하고 있으며, Azure와의 모든 통신 방식은 모두 Restful API on HTTP(S)를 근간으로 하고 있습니다.

Microsoft Open Specification을 통해서 마이크로소프트의 주요 제품과의 상호 운용을 위한 규격문서를 공개하였고, OSS와의 상호 운용성을 위해서 2009년부터 Microsoft Open Technologies를 통해서 Cocos2d-X, AMQP, ORTC, MongoDB, Python Tools for Visual Studio, Azure Toolkit for Eclipse 등 수많은 제품을 개발하고 있기도 합니다.

지난 수년간 개방과 상호 운용성의 관점에서 마이크로소프트가 진행해 왔던 다양한 성과와 더불어 이번 빌드를 통해서도 파격적이라고 할만큼의 놀라운 발표가 여럿 포함되었습니다.

먼저 Windows Library for JavaScript(WinJS)가 Apache 2.0 라이선스를 준수하는 형태로 GitHub를 통해서 공개되었습니다. 이를 통해서 개발자들은 기존의 소스 코드를 살펴보고, 다양한 피드백을 제공 할 수 있을 뿐 아니라, 직접 개발에 참여할 수도 있게 되었습니다. WinJS는 최초에는 윈도우 8.x 에서 HTML/JavaScript를 이용하여 스토어 앱을 개발할 수 있도록 해 주는 라이브러리로 개발이 시작되었으나, 최근 WinJS Phone 2.1의 출시로 윈도우 폰 8.1용 앱을 개발할 수 있도록 개선되었을 뿐 아니라, 추후 파이어폭스, iOS, 안드로이드를 포함하는 다양한 디바이스와 브라우저에서 수행되는 웹앱과 사이트를 개발할 때에도 활용할 수 있도록 대폭 수정이 이루어졌습니다. 실제로 Github 사이트를 통해서 WinJS의 방향성과 로드맵을 공개하고 있습니다.

clip_image002

<WinJS 로드맵>

더불어 실제로 웹앱과 사이트를 개발할 때 WinJS가 제공하는 풍부한 컨트롤들을 어떻게 활용할 수 있는지를 살펴볼 수 있는 사이트(https://try.buildwinjs.com/)도 오픈 하였습니다. 이제 WinJS를 이용하면 ListView, Hub, Pivot등을 포함하는 수십여종의 풍부한 사용자 컨트롤들을 크로스 브라우징 환경에서도 활용할 수 있을 뿐 아니라, WinJS가 제공하는 Promises, Data Binding, Scheduler, Fragments, Declarative controls의 기능도 활용할 수 있게 될 것입니다.

clip_image004

<Try WinJS 사이트>

앞으로 우리가 익히 알고 있는 AngularJS, KnockoutJS, EmberJS 등과 함께 WinJS가 같이 활용될 수 있을 것으로 생각하고, 실제로 Angular와 WinJS, Knockout과 WinJS를 함께 사용하는 방법을 개별 세션을 통해서 시연을 하기도 하였습니다.

clip_image006

<미래: Modular and composable>

<!DOCTYPE html>

<html xmlns:ng="https://angularjs.org" id="ng-app" ng-app="app" ng-controller="AppController">

<head>

<meta charset="utf-8" />

<title>Angular-WinJS</title>

<!-- WinJS references omitted -->

<script src="https://blogs.msdn.com/js/lib/jquery.js"></script>

<script src="https://blogs.msdn.com/js/lib/angular.js"></script>

<script src="https://blogs.msdn.com/js/lib/angular-winjs.js"></script>

<!-- Project references omitted -->

</head>

<body>

Hello, {{ name }} . Your current rating is: {{ rating }} .<br />

<input type="text" ng-model="rating" /><br />

<win-rating max-rating="5" user-rating="rating"></win-rating>

</body>

</html>

<Angular-WinJS>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>Knockout-WinJS</title>

<!-- WinJS references omitted -->

<script src="https://blogs.msdn.com/js/knockout-3.0.0.debug.js"></script>

<script src="https://blogs.msdn.com/js/knockout-winjs.js"></script>

<!-- Project references omitted -->

</head>

<body>

Hello, <span data-bind="text: name"></span>.

Your current rating is: <span data-bind="text: userRating"></span>.<br />

<input type="text" data-bind="value: userRating, valueUpdate: 'afterkeydown'" /><br />

<div data-bind="winRating: {userRating: userRating}"></div>

</body>

</html>

<Knockout-WinJS>

다음으로 .NET compiler platform(“Roslyn”)의 오픈 소스화를 빼 놓을 수 없겠습니다. Roslyn이라고 널리 알려진 .NET compiler platform은 마이크로소프트의 차세대 C#, Visual Basic 컴파일러이면서 동시에 컴파일 과정에서 생성되는 다양한 정보에 접근할 수 있는 Compiler API를 제공하는 플랫폼입니다. 주요 개발 언어인 C#, Visual Basic 컴파일러의 차기 버전을 오픈 소스화 하였다는 것만으로도 마이크로소프트가 오픈 소스를 바라보는 시각을 단적으로 이해할 수 있으리라 생각합니다. 또한 .NET compiler platform은 Syntax Tree API, Symbol API, Binding And Flow Analysis API 등과 같은 Compiler API를 제공하여 컴파일러가 컴파일 과정에서 내부적으로 생성하는 산출물에 대한 접근성을 제공하여 새롭고 강력한 정적 분석기, 구문 분석기, 리팩토링 도구들을 만들어 낼 수 있는 토대를 제공한다는데 의의가 있겠습니다. 실제로 이 같은 Compiler API를 이용하여 Enhanced source view(https://source.roslyn.codeplex.com/)와 같은 도구를 개발하여 공개하기도 하였습니다.

마이크로소프트는 이번 빌드 행사를 통해서 .NET Foundation이라는 재단의 설립도 발표하였습니다 .NET Foundation은 마이크로소프트와 Xamarin이 투자한 24개의 .NET 기반 오픈 소스를 자산으로 Apache 2.0 라이선스를 기반으로 재단을 운영할 것임을 발표하였습니다. 24개의 오픈 소스에는 .NET Compiler Platform과 주요 ASP.NET API, Entity framework, Azure .NET SDK, LINQ to Hive 등이 포함되어 있습니다.

clip_image008

마이크로소프트의 개방 및 상호 운용성에 대한 노력은 마이크로소프트의 제품과 플랫폼 전반에 걸쳐 잘 녹아 있습니다. 표준을 준수하고, 표준을 정의하고, 또한 표준을 위한 선도적인 기술연구는 끊임없이 지속되고 있으며 실제로 개방형 기술을 토대로 한 제품의 개발은 마이크로소프트 비즈니스의 핵심이라고 해도 과언이 아닙니다. 지난 수년간 마이크로소프트는 ANSI, ECMA, GSMA, IEEE, IETF, ISO, IASIS, W3C 등 150개가 넘는 표준 제정 기관과 350개의 워킹그룹에 참여하여 산업 표준을 개발하고 준수하기 위해서 노력하고 있기도 합니다.

이번 빌드 2014를 통하여 마이크로소프트와 오픈 소스는 대응점에 있는 것이 아니라 커뮤니티를 통해서 상호 작용하면서 발전하고 있으며, 마이크로소프트의 개방과 상호 운용을 위한 노력이 단기간의 비즈니스의 이득을 취하려는 것이 아니라, 개발자의 생태계의 전체적인 발전을 도모하고 있음을 보여주는 뜻있는 자리가 아니었나 생각합니다.

참고

Microsoft Open Specifications

https://www.microsoft.com/openspecifications/en/us/default.aspx

Microsoft Open Technologies

https://msopentech.com/

Endorsed distributions of Linux in Azure

https://azure.microsoft.com/en-us/documentation/articles/linux-endorsed-distributions/

Bringing WinJS cross-platform and open source

https://blogs.windows.com/windows/b/buildingapps/archive/2014/04/02/bringing-winjs-cross-platform-and-open-source.aspx

winjs/winjs · GitHub

https://github.com/winjs/winjs/

Roadmap · winjs/winjs Wiki · GitHub

https://github.com/winjs/winjs/wiki/Roadmap

Try WinJS

https://try.buildwinjs.com/

What's New in WinJS: The Road Ahead | Build 2014 | Channel 9

https://channel9.msdn.com/Events/Build/2014/2-506

.NET Compiler Platform ("Roslyn")

https://roslyn.codeplex.com/

Enhanced source view

https://source.roslyn.codeplex.com/

.Net Foundation | Open Source Foundation for the .NET Community

https://www.dotnetfoundation.org/