수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1691135
  • Today | 441
  • Yesterday | 628

120 Articles, Search for 'Software'

  1. 2009/01/21 Sysinternals Utilities
  2. 2009/01/21 NirSoft Freeware Utilities
  3. 2008/04/27 Windows Server 2008
  4. 2005/10/12 오류없는 SW 개발을 꿈꾼다
  5. 2005/05/30 해커를 움직이는 힘
  6. 2005/05/30 메인스트림으로 도약하는 리눅스 커널 2.6 -1
  7. 2005/05/30 64비트 시스템에서 바라 본 운영체제 패러다임의 변화-3
  8. 2005/05/30 64비트 시스템에서 바라 본 운영체제 패러다임의 변화-2
  9. 2005/05/30 64비트 시스템에서 바라 본 운영체제 패러다임의 변화-1
  10. 2005/05/29 공개 소프트웨어 라이선스 종류와 그 특징들
«Prev  1 2 3 4 5 ... 12  Next»
Software2009/01/21 17:36

Sysinternals Utilities

http://technet.microsoft.com/en-us/sysinternals

Sysinternals Suite
The entire set of Sysinternals Utilities rolled up into a single download.

AccessChk
v4.23 (December 19, 2008)
This update fixes a bug that sometimes caused AccessChk to not show the full list of rights and privileged assigned to a user account.

AccessEnum
1.32 (November 1, 2006)
This simple yet powerful security tool shows you who has what access to directories, files and Registry keys on your systems. Use it to find holes in your permissions.

AdExplorer
v1.01 (November 27, 2007)
Active Directory Explorer is an advanced Active Directory (AD) viewer and editor.

AdInsight
v1.01 (November 20, 2007)
An LDAP (Light-weight Directory Access Protocol) real-time monitoring tool aimed at troubleshooting Active Directory client applications.

AdRestore
v1.1 (November 1, 2006)
Undelete Server 2003 Active Directory objects.

Autologon
v2.10 (November 1, 2006)
Bypass password screen during logon.

Autoruns
v9.38 (January 12, 2009)
See what programs are configured to startup automatically when your system boots and you login. Autoruns also shows you the full list of Registry and file locations where applications can configure auto-start settings.

BgInfo
v4.14 (August 8, 2008)
This fully-configurable program automatically generates desktop backgrounds that include important information about the system including IP addresses, computer name, network adapters, and more.

BlueScreen
v3.2 (November 1, 2006)
This screen saver not only accurately simulates Blue Screens, but simulated reboots as well (complete with CHKDSK), and works on Windows NT 4, Windows 2000, Windows XP, Server 2003 and Windows 9x.

CacheSet
v1.0 (November 1, 2006)
CacheSet is a program that allows you to control the Cache Manager's working set size using functions provided by NT. It's compatible with all versions of NT.

ClockRes
v1.0 (November 1, 2006)
View the resolution of the system clock, which is also the maximum timer resolution.

Contig
v1.55 (September 30, 2008)
Wish you could quickly defragment your frequently used files? Use Contig to optimize individual files, or to create new files that are contiguous.

Coreinfo
v1.0 (September 11, 2008)
Coreinfo is a new command-line utility that shows you the mapping between logical processors and the physical processor, NUMA node, and socket on which they reside, as well as the cache’s assigned to each logical processor.

Ctrl2cap
v2.0 (November 1, 2006)
This is a kernel-mode driver that demonstrates keyboard input filtering just above the keyboard class driver in order to turn caps-locks into control keys. Filtering at this level allows conversion and hiding of keys before NT even "sees" them. Ctrl2cap also shows how to use NtDisplayString() to print messages to the initialization blue-screen.

DebugView
v4.76 (October 16, 2008)
Another first from Sysinternals: This program intercepts calls made to DbgPrint by device drivers and OutputDebugString made by Win32 programs. It allows for viewing and recording of debug session output on your local machine or across the Internet without an active debugger.

Desktops
v1.0 (August 21, 2008)
This new utility enables you to create up to four virtual desktops and to use a tray interface or hotkeys to preview what’s on each desktop and easily switch between them.

DiskExt
v1.1 (May 14, 2007)
Display volume disk-mappings.

Diskmon
v2.01 (November 1, 2006)
This utility captures all hard disk activity or acts like a software disk activity light in your system tray.

DiskView
v2.21 (November 1, 2006)
Graphical disk sector utility.

Disk Usage (DU)
v1.33 (December 10, 2008)
View disk usage by directory.

EFSDump
v1.02 (November 1, 2006)
View information for encrypted files.

Filemon
v7.04 (November 1, 2006)
This monitoring tool lets you see all file system activity in real-time.

Handle
v3.42 (November 19, 2008)
This handy command-line utility will show you what files are open by which processes, and much more.

Hex2dec
v1.0 (November 1, 2006)
Convert hex numbers to decimal and vice versa.

Junction
v1.05 (July 24, 2007)
Create Win2K NTFS symbolic links.

LDMDump
v1.02 (November 1, 2006)
Dump the contents of the Logical Disk Manager's on-disk database, which describes the partitioning of Windows 2000 Dynamic disks.

ListDLLs
v2.25 (November 1, 2006)
List all the DLLs that are currently loaded, including where they are loaded and their version numbers. Version 2.0 prints the full path names of loaded modules.

LiveKd
v3.0 (November 1, 2006)
Use Microsoft kernel debuggers to examine a live system.

LoadOrder
v1.0 (November 1, 2006)
See the order in which devices are loaded on your WinNT/2K system.

LogonSessions
v1.0 (November 1, 2006)
List the active logon sessions on a system.

MoveFile
v1.0 (November 1, 2006)
Allows you to schedule move and delete commands for the next reboot.

NewSID
v4.10 (November 1, 2006)
Learn about the computer SID problem everybody has been talking about and get a free computer SID changer, NewSID.

NTFSInfo
v1.0 (November 1, 2006)
Use NTFSInfo to see detailed information about NTFS volumes, including the size and location of the Master File Table (MFT) and MFT-zone, as well as the sizes of the NTFS meta-data files.

PageDefrag
v2.32 (November 1, 2006)
Defragment your paging files and Registry hives.

PendMoves
v1.1 (November 1, 2006)
Enumerate the list of file rename and delete commands that will be executed the next boot.

PortMon
v3.02 (November 1, 2006)
Monitor serial and parallel port activity with this advanced monitoring tool. It knows about all standard serial and parallel IOCTLs and even shows you a portion of the data being sent and received. Version 3.x has powerful new UI enhancements and advanced filtering capabilities.

Process Explorer
v11.32 (January 12, 2009)
Find out what files, registry keys and other objects processes have open, which DLLs they have loaded, and more. This uniquely powerful utility will even show you who owns each process.

Process Monitor
v2.03 (December 10, 2008)
Monitor file system, Registry, process, thread and DLL activity in real-time.

ProcFeatures
v1.10 (November 1, 2006)
This applet reports processor and Windows support for Physical Address Extensions and No Execute buffer overflow protection.

PsExec
v1.94 (January 4, 2008)
Execute processes with limited-user rights.

PsFile
v1.02 (December 4, 2006)
See what files are opened remotely.

PsGetSid
v1.43 (December 4, 2006)
Displays the SID of a computer or a user.

PsInfo
v1.75 (July 9, 2007)
Obtain information about a system.

PsKill
v1.12 (December 4, 2006)
Terminate local or remote processes.

PsList
v1.28 (December 4, 2006)
Show information about processes and threads.

PsLoggedOn
v1.33 (December 4, 2006)
Show users logged on to a system.

PsLogList
v2.64 (December 4, 2006)
Dump event log records.

PsPasswd
v1.22 (December 4, 2006)
Changes account passwords.

PsService
v2.22 (January 11, 2008)
View and control services.

PsShutdown
v2.52 (December 4, 2006)
Shuts down and optionally reboots a computer.

PsSuspend
v1.06 (December 4, 2006)
Suspend and resume processes.

PsTools
v2.43 (February 12, 2007)
The PsTools suite includes command-line utilities for listing the processes running on local or remote computers, running processes remotely, rebooting computers, dumping event logs, and more.

RegDelNull
v1.10 (November 1, 2006)
Scan for and delete Registry keys that contain embedded null-characters that are otherwise undeleteable by standard Registry-editing tools.

RegHide
v1.0 (November 1, 2006)
Creates a key called "HKEY_LOCAL_MACHINE\Software\Sysinternals\Can't touch me!\0" using the Native API, and inside this key it creates a value.

RegJump
v1.01 (November 1, 2006)
Jump to the registry path you specify in Regedit.

RegMon
v7.04 (November 1, 2006)
This monitoring tool lets you see all Registry activity in real-time.

RootkitRevealer
v1.71 (November 1, 2006)
Scan your system for rootkit-based malware.

SDelete
v1.51 (November 1, 2006)
Securely overwrite your sensitive files and cleanse your free space of previously deleted files using this DoD-compliant secure delete program.

ShareEnum
v1.6 (November 1, 2006)
Scan file shares on your network and view their security settings to close security holes.

ShellRunas
v1.01 (February 28, 2008)
Launch programs as a different user via a convenient shell context-menu entry.

Sigcheck
v1.54 (September 30, 2008)
Dump file version information and verify that images on your system are digitally signed.

Streams
v1.56 (April 27, 2007)
Reveal NTFS alternate streams.

Strings
v2.40 (April 24, 2007)
Search for ANSI and UNICODE strings in binaryimages.

Sync
v2.0 (November 1, 2006)
Flush cached data to disk.

TCPView
v2.53 (January 11, 2008)
Active socket command-line viewer.

VolumeId
v2.0 (November 1, 2006)
Set Volume ID of FAT or NTFS drives.

Whois
v1.01 (November 1, 2006)
See who owns an Internet address.

WinObj
v2.15 (November 1, 2006)
The ultimate Object Manager namespace viewer is here.

ZoomIt
v3.01 (January 12, 2009)
Presentation utility for zooming and drawing on the screen.

"Software" 카테고리의 다른 글
  • Sysinternals Utilities (0)2009/01/21
  • NirSoft Freeware Utilities (0)2009/01/21
  • Windows Server 2008 (0)2008/04/27
  • 오류없는 SW 개발을 꿈꾼다 (0)2005/10/12
  • 해커를 움직이는 힘 (0)2005/05/30
2009/01/21 17:36 2009/01/21 17:36
Posted by webdizen
Tags Monitoring, Network, Process, Scanner, Sysinternals, System
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3315

Leave your greetings.

[로그인][오픈아이디란?]

Software2009/01/21 15:36

NirSoft Freeware Utilities

http://www.nirsoft.net

Password Recovery Utilities
The utilities provided in the following section are for password recovery and educational purposes only. They are not intended to be used for illegal purposes.
MessenPass v1.24 - Instant Messenger Password Recovery
MessenPass is a password recovery tool that reveals the passwords of the following instant messenger applications: MSN Messenger, Windows Messenger (In Windows XP), Windows Live Messenger (In Windows XP And Vista), Yahoo Messenger (Version 5.x/6.x), ICQ Lite 4.x/5.x/2003, AOL Instant Messenger, AIM 6.x, AIM Pro, Trillian, Miranda, and GAIM.
Asterisk Logger v1.04
Automatically reveals the passwords stored behind the asterisks ('***') in standard password text-boxes of Windows.
Dialupass v3.00 - Dialup Password Recovery
This utility enumerates all dialup/VPN entries on your computers, and displays their logon details: User Name, Password, and Domain. You can use it to recover a lost password of your Internet connection or VPN.
Dialupass also allows you to save the dialup/VPN list into text/html/csv/xml file, or copy it to the clipboard.
Protected Storage PassView v1.63
This utility reveals the passwords stored on your computer by Internet Explorer, Outlook Express and POP3 accounts of MS-Outlook. The passwords are revealed by reading the information from the Protected Storage.
IE PassView v1.15
IE PassView is a small utility that reveals the passwords stored by Internet Explorer browser. It supports the new Internet Explorer 7.0/8.0, as well as older versions of Internet explorer, v4.0 - v6.0
PasswordFox v1.10
PasswordFox is a small password recovery tool that allows you to view the user names and passwords stored by Mozilla Firefox Web browser. By default, PasswordFox displays the passwords stored in your current profile, but you can easily select to watch the passwords of any other Firefox profile. For each password entry, the following information is displayed: Record Index, Web Site, User Name, Password, User Name Field, Password Field, and the Signons filename.
ChromePass v1.05
ChromePass is a small password recovery tool that allows you to view the user names and passwords stored by Google Chrome Web browser. For each password entry, the following information is displayed: Origin URL, Action URL, User Name Field, Password Field, User Name, Password, and Created Time. You can select one or more items and then save them into text/html/xml file or copy them to the clipboard.
Network Password Recovery v1.20
When you connect to a network share on your LAN or to your .NET Passport/Messenger account, Windows XP/Vista allows you to save your password in order to use it in each time that you connect the remote server. This utility recovers all network passwords stored on your system for the current logged-on user.
AsterWin IE v1.03
This utility reveals the passwords stored behind the asterisks in the web pages of Internet Explorer 5.0 and above. You can use it for recovering a lost web site password, if it's stored on your computer.
It was developed in Visual Basic environment and requires the Visual Basic Runtime library.
Source code is included !
Mail PassView v1.46 - Email Password Recovery
Recovers the passwords and other email accounts information of the following email applications: Outlook Express, Microsoft Outlook 2000 (POP3/SMTP Accounts only), Microsoft Outlook 2002/2003/2007, Windows Mail, IncrediMail, Eudora, Netscape Mail, Mozilla Thunderbird, Group Mail Free, and Web-based email accounts.
PstPassword v1.11
PstPassword is a small utility that recover lost password of Outlook .PST (Personal Folders) file.
WirelessKeyView v1.20
WirelessKeyView recovers all wireless network keys (WEP/WPA) stored in your computer by the 'Wireless Zero Configuration' service of Windows XP and by the 'WLAN AutoConfig' service of Windows Vista. It allows you to easily save all keys to text/html/xml file, or copy a single key to the clipboard.
Remote Desktop PassView v1.01
Remote Desktop PassView is a small utility that reveals the password stored by Microsoft Remote Desktop Connection utility inside .rdp files.
LSASecretsView v1.20
LSASecretsView is a small utility that displays the list of all LSA secrets stored in the Registry on your computer. The LSA secrets key is located under HKEY_LOCAL_MACHINE\Security\Policy\Secrets and may contain your RAS/VPN passwords, Autologon password, and other system passwords/keys.
LSASecretsDump v1.20
LSASecretsDump is a small console application that extract the LSA secrets from the Registry, decrypt them, and dump them into the console window. The LSA secrets key is located under HKEY_LOCAL_MACHINE\Security\Policy\Secrets and may contain your RAS/VPN passwords, Autologon password, and other system passwords/keys.
This utility is the console version of LSASecretsView.
PCAnywhere PassView v1.11
Reveals the passwords stored in PCAnywhere items. Both login information and the protection passwords are revealed instantly.
Access PassView v1.12
This utility reveals the database password of every password-protected mdb file that created with Microsoft Access 95/97/2000/XP or with Jet Database Engine 3.0/4.0
It can be very useful if you forgot your Access Database password and you want to recover it.
Win9x PassView v1.1
The Win9x PassView utility reveals the passwords stored on your computer by Windows 95/98 operating system.
Content Advisor Password Remover v1.01
Removes the Content Advisor password in Internet Explorer (versions 4.x and above).
Visual C++ Source code is included.

Enterprise Manager PassView v1.00
Reveals the passwords that SQL Server Enterprise Manager stores on your computer.
AsterWin v1.20
This utility reveals the passwords stored behind the asterisks in standard password text-boxes.
It supports the following operating systems: Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000 and Windows XP.
VNCPassView v1.01
VNCPassView is a small utility that recover the passwords stored by the VNC tool. It can recover 2 of passwords: password stored for the current logged-on user (HKEY_CURRENT_USER in the Registry), and password stored for the all users.
AspNetUserPass v1.00
AspNetUserPass is a very simple console-based utility that displays the password of ASPNet user on your system.
Netscapass v2.03
Reveals the stored mail password (POP3 server password) for Netscape Communicator 4.x, Netscape 6.x and Netscape 7. It can also reveal the stored web-sites passwords in Netscape 6.x/7.x

Network Monitoring Tools
SmartSniff v1.45
SmartSniff allows you to capture TCP/IP packets that pass through your network adapter, and view the captured data as sequence of conversations between clients and servers. You can view the TCP/IP conversations in Ascii mode (for text-based protocols, like HTTP, SMTP, POP3 and FTP.) or as hex dump. (for non-text base protocols, like DNS)
SniffPass v1.07 - Password Sniffer
SniffPass is small utility that listens to your network, capture the passwords that pass through your network adapter, and display them on the screen instantly. SniffPass can capture the passwords of the following Protocols: POP3, IMAP4, SMTP, FTP, and HTTP (basic authentication passwords).
You can use this utility to recover lost Web/FTP/Email passwords.
SocketSniff v1.02
SocketSniff allows you to watch the Windows Sockets (WinSock) activity of the selected process.
For each created socket, the following information is displayed: socket handle, socket type, local and remote addresses, local and remote ports, total number of send/receive bytes, and more. You can also watch the content of each send or receive call, in Ascii mode or as Hex Dump.
CurrPorts v1.56
CurrPorts displays the list of all currently opened TCP/IP and UDP ports on your local computer. For each port in the list, information about the process that opened the port is also displayed, including the process name, full path of the process, version information of the process (product name, file description, and so on), the time that the process was created, and the user that created it.
In addition, CurrPorts allows you to close unwanted TCP connections, kill the process that opened the ports, and save the TCP/UDP ports information to HTML file , XML file, or to tab-delimited text file.
CurrPorts also automatically mark with pink color suspicious TCP/UDP ports owned by unidentified applications (Applications without version information and icons)
AdapterWatch v1.04
AdapterWatch displays useful information about your network adapters: IP addresses, Hardware address, WINS servers, DNS servers, MTU value, Number of bytes received or sent, The current transfer speed, and more. In addition, it displays general TCP/IP/UDP/ICMP statistics for your local computer.
NetResView v1.16
NetResView is a small utility that displays the list of all network resources (computers, disk shares, and printer shares) on your LAN. As opposed to "My Network Places" module of Windows, NetResView display all network resources from all domains/workgroups in one screen, and including admin/hidden shares.
PingInfoView v1.20
PingInfoView is a small utility that allows you to easily ping multiple host names and IP addresses, and watch the result in one table. It automatically ping to all hosts every number of seconds that you specify, and displays the number of succeed and failed pings, as well as the average ping time. You can also save the ping result into text/html/xml file, or copy it to the clipboard.

Web Browser Tools
IECookiesView v1.73
This utility displays the details of all cookies that Internet Explorer stores on your computer. In addition, it allows you to change the content of the cookies, delete unwanted cookies files, save the cookies into a readable text file, find cookies by specifying the domain name, view the cookies of other users and in other computers, and more...
Read More >>     
IECacheView v1.21 - Internet Explorer Cache Viewer
IECacheView is a small utility that reads the cache folder of Internet Explorer, and displays the list of all files currently stored in the cache. For each cache file, the following information is displayed: Filename, Content Type, URL, Last Accessed Time, Last Modified Time, Expiration Time, Number Of Hits, File Size, Folder Name, and full path of the cache filename. You can easily save the cache information into text/html/xml file, or copy the cache table to the clipboard and then paste it to another application, like Excel or OpenOffice Spreadsheet.
IEHistoryView v1.37
This utility reads all information from the history file on your computer, and displays the list of all URLs that you have visited with Internet Explorer browser in the last few days. It also allows you to select one or more URL addresses, and then remove them from the history file or save them into text, HTML or XML file. In addition, you are allowed to view the visited URL list of other user profiles on your computer, and even access the visited URL list on a remote computer, as long as you have permission to access the history folder.
MozillaCookiesView v1.26
MozillaCookiesView is an alternative to the standard 'Cookie Manager' provided by Netscape and Mozilla browsers. It displays the details of all cookies stored inside the cookies file (cookies.txt) in one table, and allows you to save the cookies list into text, HTML or XML file, delete unwanted cookies, and backup/restore the cookies file.
MozillaHistoryView v1.18
MozillaHistoryView is a small utility that reads the history data file (history.dat) of Firefox/Mozilla/Netscape Web browsers, and displays the list of all visited Web pages in the last days. For each visited Web page, the following information is displayed: URL, First visit date, Last visit date, Visit counter, Referrer, Title, and Host name.
You can also easily export the history data to text/HTML/Xml file.
MozillaCacheView v1.17
MozillaCacheView is a small utility that reads the cache folder of Firefox/Mozilla/Netscape Web browsers, and displays the list of all files currently stored in the cache. For each cache file, the following information is displayed: URL, Content type, File size, Last modified time, Last fetched time, Expiration time, Fetch count, Server name, and more.
You can easily select one or more items from the cache list, and then extract the files to another folder, or copy the URLs list to the clipboard.
OperaCacheView v1.11
OperaCacheView is a small utility that reads the cache folder of Opera Web browser, and displays the list of all files currently stored in the cache. For each cache file, the following information is displayed: URL, Content type, File size, Last accessed time, and last modified time in the server.
You can easily select one or more items from the cache list, and then extract the files to another folder, or copy the URLs list to the clipboard.
ChromeCacheView v1.10
ChromeCacheView is a small utility that reads the cache folder of Google Chrome Web browser, and displays the list of all files currently stored in the cache. For each cache file, the following information is displayed: URL, Content type, File size, Last accessed time, Expiration time, Server name, Server response, and more. You can easily select one or more items from the cache list, and then extract the files to another folder, or copy the URLs list to the clipboard.
MyLastSearch v1.32
MyLastSearch utility scans the cache and history files of your Web browser, and locate all search queries that you made with the most popular search engines (Google, Yahoo and MSN). The search queries that you made are displayed in a table with the following columns: Search Text, Search Engine, Search Time, Web Browser, and the search URL.
IEDesignMode v1.00
IEDesignMode Adds a new menu item into the context menu of Internet Explorer that allows you to easily switch the active Internet Explorer window to design mode. When a Web page in in design mode, you can change the location of images and other objects, change the current text, paste a new text into the Web page, and so on. After you made your changes, you can easily switch back to non-design mode and/or save the modified Web page to HTML file.
FavoritesView v1.20
FavoritesView displays the list of all your Favorties (of Internet Explorer browser) and bookmarks (of Netscape/Mozilla browsers) in a single page. Each line in the list specifies the title of the item, the URL address, the created/modified date of the bookmark item, and the folder name. You select one or more of these bookmarks, and then copy them to the clipboard, delete them (Only for Internet Explorer Favorites), export them to tab-delimited text file, HTML file, or XML file. FavoritesView also allows you to locate duplicate URL addresses in your Favorites/Bookmarks or find specific item by specifying the URL or the title.
ActiveX Compatibility Manager v1.00
This utility allows you to easily disable/enable ActiveX components on Internet Explorer browser.

Video/Audio Related Utilities
VideoCacheView v1.40
After watching a video in a Web site, you may want to save the video file into your local disk for playing it offline in the future. If the video file is stored in your browser's cache, this utility can help you to extract the video file from the cache and save it for watching it in the future.
It automatically scans the entire cache of Internet Explorer and Mozilla-based Web browsers (Including Firefox) and finds all video files that are currently stored in it. It allows you to easily copy the cached video files into another folder for playing/watching them in the future. If you have a movie player that is configured to play flv files, it also allows you to play the video directly from your browser's cache.
WebVideoCap v1.33
While watching a video in a Web site, you may sometimes want to save the video into your local drive, and then play it offline later. This utility allows you to capture .flv (Flash Video) files and RTSP streams while the Web browser download and play them inside a Web page. After the entire video file is downloaded and played by the Web browser, the video file is saved in the folder that you selected, and you can play it offline later with any Video player.
WebVideoCap can capture the video files of most popular video-sharing sites, including YouTube, Google Video, Yahoo Video, iFilm, Metacafe, Putfile, and more...
Volumouse v1.65
Volumouse provides you a quick and easy way to control the sound volume on your system - simply by rolling the wheel of your wheel mouse.
It allows you to define a set of rules for determining when the wheel will be used for changing the sound volume. For example: You can configure Volumouse to use your mouse wheel for volume control when the Alt key is hold down, when the left mouse button is down, when the mouse cursor is over the taskbar, and so on...
When the conditions that you define are not satisfied, your mouse wheel will be used for the regular scrolling tasks, exactly as before.
InstalledCodec v1.05
InstalledCodec is a small utility displays the list of all Codec drivers and DirectShow filters currently installed on your system. For each component the following information is displayed: Display Name, Type, Disabled Status, Installed/Modified Time, Description, Company Name, Filename, and more... It allows you to easily disable or enable any Codec/DirectShow component or export the list into text/xml/html file.

Internet Related Utilities
IPNetInfo v1.18
IPNetInfo is a small utility that allows you to easily find all available information about an IP address: The owner of the IP address, the country/state name, IP addresses range, contact information (address, phone, fax, and email), and more.
This utility can be very useful for finding the origin of unsolicited mail. You can simply copy the message headers from your email software and paste them into IPNetInfo utility. IPNetInfo automatically extracts all IP addresses from the message headers, and displays the information about these IP addresses.
WhoisThisDomain v1.31
This utility allows you to easily get information about a registered domain. It automatically connect to the right WHOIS server, according to the top-level domain name, and retrieve the WHOIS record of the domain. It support both generic domains and country code domains.
IPInfoOffline v1.05
IPInfoOffline Allows you to view information about IP addresses, without connecting any external server. It uses a compressed IP addresses database that is stored inside the exe file. For each IP address, the following information is displayed: IP block range, Organization (RIPE, ARIN, APNIC, LACNIC or AFRINIC), Assigned Date, Country Name, and Country Code. After retrieving the information about the desired IP addresses, You can copy the information to the clipboard, or save it into text/html/xml/csv file.
DNSDataView v1.00
This utility is a GUI alternative to the NSLookup tool that comes with Windows operating system. It allows you to easily retrieve the DNS records (MX, NS, A, SOA) of the specified domains. You can use the default DNS server of your Internet connection, or use any other DNS server that you specify. After retrieving the DNS records for the desired domains, you can save them into text/xml/html/csv file.
FastResolver v1.22
FastResolver is a small utility that resolves multiple host names into IP addresses and vice versa. You can simply type the list of IP addresses or host name that you want to resolve, or alternatively, you can specify IP addresses range that you want to scan. For local network, FastResolver also allows you to get the MAC address of all IP addresses that you scan. FastResolver is a multithreaded application, so it can resolve dozens of addresses within a few seconds.
SiteShoter v1.30
SiteShoter is a small utility that allows you to save a screenshot of any Web page into a file. It automatically creates hidden window of Internet Explorer, loads the desired Web page, and than save the entire content of the Web page into an image file (.png, .jpg, .tiff, .bmp or .gif). You can use SiteShoter in user interface mode, or alternatively, you can run SiteShoter in command-line mode without displaying any user interface.
SeqDownload v1.20
This utilities allows you to automatically download live images from the Web for every xxx seconds/minutes and store the files on your local drive. After collecting a fair amount of images, you can easily create nice animation from the downloaded images.
This utility is especially useful for live cams Web sites, weather radar images, and satellite images.
GoogRank v1.01
GoogRank is a simple utility that retrieves and displays the Google's PageRank of a Web page.
HTMLAsText v1.06
HTMLAsText utility converts HTML documents to simple text files, by removing all HTML tags and formatting the text according to your preferences.
IdenSwitch v1.01
This utility allows you to instantly open Outlook Express with the desired identity, without requiring you to switch the identity through the menu of Outlook Express.
AddrView v1.01
AddrView allows you to parse HTML pages and extract most URL addresses stored in them. AddrView extracts URLs of images (<img> tag), links to other files (<a> tag), CSS files, frames, Flash files, and more.
TagsReport v1.00
TagsReport reads HTML file and displays statistical information about the tags the appears in it.
JavaScript Animator Express v1.10
This utility allows you to easily create animation from image files (GIFs and JPGs) on your local drive. The animation is achieved by creating a simple HTML page with JavaScript animation, and running it on your default browser.
CustomizeIE v1.01
Add new menu items and toolbar buttons to Internet Explorer
TurnFlash v2.10 (UI Version)
TurnFlash is a small utility that allows you to eaily disable and enable the Macromedia Flash player component in Internet Explorer.
TurnFlash v1.00 (command-line version)
small command-line utility that allows you to eaily disable and enable the Macromedia Flash player component in Internet Explorer.
Source code is included !
MIMEView v1.10
This utility displays the list of all MIME types defined in your system. For each MIME type, information about the associated file extension and installed plugin is also displayed.

Command-Line Utilities
NirCmd v2.20
NirCmd is a small command-line utility that allows you to do some useful tasks without displaying any user interface. By running NirCmd with simple command-line option, you can write and delete values and keys in the Registry, write values into INI file, dial to your internet account or connect to a VPN network, restart windows or shut down the computer, create shortcut to a file, change the created/modified date of a file, change your display settings, and more...
WirelessNetConsole v1.00
WirelessNetConsole is a small console application that dumps all current detected wireless networks information into the standard output. For each wireless network, the following information is displayed: SSID, Signal Quality in %, PHY types, RSSI, MAC Address, Channel Frequency, and more.
AtNow v1.1
AtNow is a command-line utility that schedules programs and commands to run in the near future.

Visual C++ Source code is included.

GoogRankCmd v1.01
GoogRankCmd is a simple command-line utility that retrieves and displays the Google's PageRank of a Web page ,without using Google Toolbar or any other browser plugin.
WhosIP v1.02
WhosIP is a simple command-line utility that allows you to easily find all available information about an IP address: The owner of the IP address, the country/state name, IP addresses range, contact information (address, phone, fax, and email), and more.
WhoisCL v1.30
WhoisCL is a simple command-line utility that allows you to easily get information about a registered domain. It automatically connect to the right WHOIS server, according to the top-level domain name, and retrieve the WHOIS record of the domain. It supports both generic domains and country code domains.
SNRemove v1.00
This utility removes the reference to strong name signature from .NET exe and dll files. After removing the strong name reference, you can make any change you want in dll/exe file, without getting any exception or error message.

Desktop Utilities
WinLister v1.13
This utility displays the list of opened windows on your system. For each window, some useful information is displayed: the title, the handle of window, location, size, class name, process number, the name of the program that created the window, and more...
In addition, you can easily hide, show or close the selected windows, or save the windows list to text or HTML file.
ShortcutsMan v1.01
ShortcutsMan displays the details about all shortcuts that you have on your desktop and under your start menu. Broken shortcuts (shortcuts that point to file that doesn't exist) are automatically painted with pink color. You select one or more shortcuts, and then delete them, resolve them or save the shortcut's details to HTML/Text/XML file.
FileTypesMan v1.11
FileTypesMan is an alternative to the 'File Types' tab in the 'Folder Options' of Windows. It displays the list of all file extensions and types registered on your computer. For each file type, the following information is displayed: Type Name, Description, MIME Type, Perceived Type, Flags, Browser Flags, and more.
FileTypesMan also allows you to easily edit the properties and flags of each file type, as well as it allows you to add, edit, and remove actions in a file type.
MyUninstaller v1.42
MyUninstaller is an alternative utility to the standard Add/Remove applet of Windows operating system. It displays the list of all installed application, and allows you to uninstall an application, delete an uninstall entry, and save the list of all installed applications into a text file or HTML file.
MyUninstaller also provides additional information for most installed applications that the standard Add/Remove applet doesn't display: product name, company, version, uninstall string, installation folder and more.
OpenWithView v1.02
OpenWithView is a small utility that displays the list of all available applications in the 'Open With' dialog-box of Windows, and allows you to easily disable/enable the applications in the list. When application is disabled, it won't be displayed in the 'Other Programs' section of the 'Open With' dialog-box.
This utility can be useful if your 'Open With' window displays too much applications, and you want to remove the applications that you don't use frequently.
SpecialFoldersView v1.05
Windows operating system have dozens of special folders that are used for storing application settings and files, storing Internet files, saving temporary files, storing shortcuts to other files, and so on.
This utility displays the list of all special folders in your system, and allows you to easily jump to the right folder simply by double-clicking the folder item. You can also save the list of all folder paths into text/html/xml file.
InsideClipboard v1.06
Each time that you copy something into the clipboard for pasting it into another application, the copied data is saved into multiple formats. The main clipboard application of Windows only display the basic clipboard formats, like text and bitmaps, but doesn't display the list of all formats that are stored in the clipboard.
InsideClipboard is a small utility that displays the binary content of all formats that are currently stored in the clipboard, and allow you to save the content of specific format into a binary file.
NirExt v1.01
NirExt utility adds 3 useful context menu extensions to your Windows Explorer environment:
  • Folder Properties: This option is available in the context menu when you right-click on a folder in your file system. It allows you change the icon of any folder you want, and change the text that appears when the mouse cursor moves over the folder.
  • Advanced Run: This option is available in the context menu when you right-click on an executable file (*.EXE). It allows you to instantly run an application with command-line and some other options.
  • Create Shortcut+: This option is available in the context menu when you right-click on any file in your system. It allows you to instantly create a shortcut and drop it into one of the following folders: Desktop, Start Menu, Programs folder under Start Menu, Common Desktop (for all users), Common Start Menu (for all users), and Common Programs folder (for all users) under Start Menu.
WinMessControl v1.00
Disable/enable the 'Windows Messenger' application under Windows XP.

Programmer Tools
DLL Export Viewer v1.26
This utility displays the list of all exported functions and their virtual memory addresses for the specified DLL files. You can easily copy the memory address of the desired function, paste it into your debugger, and set a breakpoint for this memory address. When this function is called, the debugger will stop in the beginning of this function.
GDIView v1.03
GDIView is a unique tool that displays the list of GDI handles (brushes, pens, fonts, bitmaps, and others) allocated by every process. It displays the total count for each type of GDI handle, as well as detailed information about each handle. This tool can be useful for developers that need to trace GDI resources leak in their software.
HeapMemView v1.02
HeapMemView is a small utility that allows you to view the content of all memory blocks allocated in the heap of the process the you select. This tool can be useful for developers that need to trace memory leaks in their software.
DeviceIOView v1.01
DeviceIOView allows you to watch the data transfer between a software or service and a device driver (DeviceIoControl calls). For each call to a device driver, the following information is displayed: Handle, Control Code, number of input bytes, number of output bytes, the name of the device handle, and all the input/output bytes, displayed as Hex dump.

System Utilities
OpenedFilesView v1.30
OpenedFilesView displays the list of all opened files on your system. For each opened file, additional information is displayed: handle value, read/write/delete access, file position, the process that opened the file, and more... Optionally, you can also close one or more opened files, or close the process that opened these files.
ProcessActivityView v1.06
ProcessActivityView creates a summary of all files and folders that the selected process tries to access. For each file that the process access, the following information is displayed: Number of times that the file was opened and closed, number of read/write calls, total number of read/write bytes, the dll that made the last open-file call, and more...
WinUpdatesList v1.23
WinUpdatesList displays the list of all Windows updates (Service Packs and Hotfixes) installed on your local computer. For hotfix updates, this utility also displays the list of files updated with these hotfixes. In addition, it allows you to instantly open the Web link in Microsoft Web site that provides more information about the selected update, uninstall an update, copy the update information to the clipboard, or save it to text/HTML/XML file.
SysExporter v1.41
SysExporter utility allows you to grab the data stored in standard list-views, list boxes, and combo boxes from almost any application running on your system, and export it to text, HTML or XML file.
ShellExView v1.36 - Shell Extensions Manager
The ShellExView utility displays the details of shell extensions installed on your computer, and allows you to easily disable and enable each shell extension.
URLProtocolView v1.12
URLProtocolView is a simple utility that displays all URL protocols (for example: ftp:, telnet:, mailto:) that are currently installed on your system. For each URL protocol, the following information is displayed: The protocol name, the protocol description, the command-line that is executed when you type or click the URL, the product name, and the company name. This utility also allows you to easily enable/disable the URL protocols.
RegScanner v1.70
RegScanner is a small utility that allows you to scan the Registry, find the desired Registry values that match to the specified search criteria, and display them in one list. After finding the Registry values, you can easily jump to the right value in RegEdit, simply by double-clicking the desired Registry item.
RegFromApp v1.15
RegFromApp monitors the Registry changes made by the application that you selected, and creates a standard RegEdit registration file (.reg) that contains all the Registry changes made by the application. You can use the generated .reg file to import these changes with RegEdit when it's needed.
USBDeview v1.30
USBDeview is a small utility that lists all USB devices that currently connected to your computer, as well as all USB devices that you previously used.
For each USB device, exteneded information is displayed: Device name/description, device type, serial number (for mass storage devices), the date/time that device was added, VendorID, ProductID, and more... USBDeview also allows you to uninstall USB devices that you previously used, and disconnect USB devices that are currently connected to your computer. You can also use USBDeview on a remote computer, as long as you login to that computer with admin user.
BluetoothView v1.11
BluetoothView is a small utility that runs in the background, and monitor the activity of Bluetooth devices around you. For each detected Bluetooth device, it displays the following information: Device Name, Bluetooth Address, Major Device Type, Minor Device Type, First Detection Time, Last Detection Time, and more.
BluetoothView can also notify you when a new Bluetooth device is detected, by displaying a balloon in your taskbar or by playing a small beep sound.
WirelessNetView v1.12
WirelessNetView is a small utility that runs in the background, and monitor the activity of wireless networks around you. For each detected network, it displays the following information: SSID, Last Signal Quality, Average Signal Quality, Detection Counter, Authentication Algorithm, Cipher Algorithm, and more.
CleanAfterMe v1.30
CleanAfterMe allows you to easily clean files and Registry entries that are automatically created by the Windows operating system during your regular computer work.
With CleanAfterMe, you can clean the cookies/history/cache/passwords of Internet Explorer, the 'Recent' folder, the Registry entries that record the last opened files, the temporary folder of Windows, the event logs, the Recycle Bin, and more.
UserProfilesView v1.00
UserProfilesView displays the list of all user profiles that you currently have in your system. For each user profile, the following information is displayed: Domain\User Name, Profile Path, Last Load Time, Registry File Size, User SID, and more. You can save the profiles list into text/xml/html/csv file.
MonitorInfoView v1.03
MonitorInfoView is a small utility that displays essential information about your monitor: manufacture week/year, monitor manufacturer, monitor model, supported display modes, and more... The information is extracted from the EDID ("Extended display identification data") records stored on your computer. You can also view the monitor information of multiple computers on your network, if you login to these computers with administrator rights.
DumpEDID v1.01
DumpEDID is a small console application that extract the EDID ("Extended display identification data") records from your computer, analyze it, and dump it into the console window. EDID record provide essential information about your monitor: manufacture week/year, monitor manufacturer, monitor model, supported display modes, and so on... You can also get the EDID records of a remote computer, if you login to this computer with administrator rights.
(DumpEDID is the console version of MonitorInfoView utility)
RunAsDate v1.05
RunAsDate is a small utility that allows you to run a program in the date and time that you specify. This utility doesn't change the current system date and time of your computer, but it only injects the date/time that you specify into the desired application.
You can run multiple applications simultaneously, each application works with different date and time, while the real date/time of your system continues to run normally.
NK2View v1.25
Each time that you send a new message in Outlook, the emails that you type in To/Cc fields, are automatically inserted into the AutoComplete list, so in the next time that you type an email address, Outlook automatically completes the right email address for you.
The AutoComplete file of Outlook is stored under [Your Profile]\Application Data\Microsoft\Outlook , and it always saved as the profile name of Outlook with .NK2 extension.
This utility reads the AutoComplete file of Outlook (with .NK2 extension), displays all email records stored in it, and allows you to easily export these records into text/html/xml file.
OfficeIns v1.03 - Microsoft Office Add-Ins Manager
OfficeIns is a small utility that displays the details of all installed Microsoft Office add-ins on your computer, and allows you to disable/enable them.
ProduKey v1.35
ProduKey is a small utility that displays the ProductID and the CD-Key of MS-Office, Windows, and SQL Server installed on your computer. You can view this information for your current running operating system, or for another operating system/computer - by using command-line options.
RegDllView v1.30
RegDllView is a small utility that displays the list of all registered dll/ocx/exe files (COM registration). For each registered file, you can view the last date/time that it was registered, and the list of all registration entries (CLSID/ProgID).
MUICacheView v1.00
Each time that you start using a new application, Windows operating system automatically extract the application name from the version resource of the exe file, and stores it for using it later, in Registry key known as the 'MuiCache'.

This utility allows you to easily view and edit the list of all MuiCache items on your system. You can edit the name of the application, or alternatively, you can delete unwanted MUICache items.

ShellBagsView v1.05
Each time that you open a folder in Explorer, Windows automatically save the settings of this folder into the Registry. This utility displays the list of all folder settings saved by Windows. For each folder, the following information is displayed: The date/time that you opened it, the entry number, display mode (Details, Icons, Tiles, and so on...), the last position of the window, and the last size of the window.
UserAssistView v1.00
This utility decrypt and displays the list of all UserAssist entries stored under HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist key in the Registry. The UserAssist key contains information about the exe files and links that you open frequently. you can save the list of UserAssist entries into text/html/xml/csv file, as well as you can delete unwanted items.
MyEventViewer v1.15
MyEventViewer is a simple alternative to the standard event viewer of Windows. As oppose to Windows event viewer, MyEventViewer allows you to watch multiple event logs in one list, as well as the event description and data are displayed in the main window, instead of opening a new one. Also, with MyEventViewer you can easily select multiple event items and then save them to HTML/Text/XML file, or copy them to the clipboard (Ctrl+C) and then paste them into Excel.
ActiveXHelper v1.12
ActiveXHelper is a small utility that allows you to view essential information about ActiveX components installed on your computer. You can view the entire (and very large !) list of ActiveX components by loading it from HKEY_CLASSES_ROOT\CLSID Registry key, or alternatively, display only the ActiveX components that you specify. In addition, you can temporarily disable specific ActiveX components. When ActiveX components are disabled, they cannot be used by any software, until you enable them again.
RecentFilesView v1.09
Each time that you open a file from Windows Explorer or from a standard open/save dialog-box, the name of the file that you opened is recorded by the operating system. Some of the names are saved into the 'Recent' folder. Other are saved into the Registry.
This utility display the list of all recently opened files, and allows you to delete unwanted filename entries. You can also save the files list into text/html/xml file.
InjectedDLL v1.00
InjectedDLL is a small utility that displays the list of DLLs that are automatically injected on every process in your system.
CurrProcess v1.13
CurrProcess utility displays the list of all processes currently running on your system. For each process, you can view the list of all modules (DLL files) that the process loads into memory. for all processes and modules, additional useful information is also displayed: product name, version, company name, description of the file, the size of the file, and more.
In addition, CurrProcess allows you to do the following actions: Kill a process, Dump memory of process into a text file, Create HTML report containing information about a process with the list of all modules that it loads into memory, Save the list of all running processes into text or HTML file, and more.
ServiWin v1.35
ServiWin utility displays the list of installed drivers and services on your system. For some of them, additional useful information is displayed: file description, version, product name, company that created the driver file, and more.
In addition, ServiWin allows you to easily stop, start, restart, pause, and continue service or driver, change the startup type of service or driver (automatic, manual, disabled, boot or system), save the list of services and drivers to file, or view HTML report of installed services/drivers in your default browser.
ShellMenuView v1.07
ShellMenuView is a small utility that display the list of static menu items that appeared in the context menu when you right-click a file/folder on Windows Explorer, and allows you to easily disable unwanted menu items.
DriverView v1.16
DriverView utility displays the list of all device drivers currently loaded on your system. For each driver in the list, additional useful information is displayed: load address of the driver, description, version, product name, company that created the driver, and more.
FoldersReport v1.21
The FoldersReport utility scans a drive or a base folder that you select, and displays essential information for each folder that it finds: The size of all files inside the folder, The real files size on the disk, number of files inside the folder, number of hidden files, number of compressed files, and number of subfolders. You can use this utility to easily find out which folders use the most space in your drive. You can scan the folders of your local drives, CD-ROM drives, and network resources on a remote computer.
StartupRun v1.22
The StartupRun utility displays the list of all applications that are loaded automatically when Windows boots. For each application, additional information is displayed (Product Name, File Version, Description, and Company Name), in order to allow you to easily identify the applications that are loaded at Windows startup. if StartupRun identifies a spyware or adware program that runs at startup, it automatically paints it in pink color. In addition, you are allowed to Edit, disable, enable and delete the selected startup entries. You can also save the list of startup items into a text or html files, and even add a new startup entry to the Registry.
GACView v1.11
GACView is an alternative to the standard .NET assembly viewer on Windows Explorer. In addition to the standard columns, GACView displays additional information for each assembly, like modified date, file size, full path of the assembly file, file version, and so on. GACView also allows you to delete an assembly the cannot be uninstalled in the regular way.
JRView v1.00
JRView is a small utility that displays the list of all Java Runtime Environments and Java Development Kits installed on your system, and allows you to run a Java application (.class or .jar file) on the desired Java environment.
MMCompView v1.10
Displays the details of all installed multimedia components (Codec, ActiveX filters) and allows you disable/enable specific components.
IECompo v1.00
Displays the installed Internet Explorer components on your computer.
FileDate Changer v1.1
This utility allows you to eaily change the created, modified and accessed date of any file in your system. You can select multiple files and change the dates of them at once.
Explorestart v1.00
Explorestart is a very simple utility that simply restart Explorer and Internet Explorer. When you run this tool, all instances of Explorer (explorer.exe) and Internet Explorer (iexplore.exe) are terminated instantly, and a new instance of Explorer is created after a few seconds.
StartBlueScreen v1.00
This utility, just as it sounds, allows your to crash the Windows operating system by initiating a Blue Screen of Death according to 5 parameters that you specify from command-line.

Other Utilities
SkypeLogView v1.06
SkypeLogView reads the log files created by Skype application, and displays the details of incoming/outgoing calls, chat messages, and file transfers made by the specified Skype account. You can select one or more items from the logs list, and then copy them to the clipboard, or export them into text/html/csv/xml file.
ResourcesExtract v1.10
ResourcesExtract is a small utility that scans dll/ocx/exe files and extract all resources (bitmaps, icons, cursors, AVI movies, HTML files, and more...) stored in them into the folder that you specify. You can use ResourcesExtract in user interface mode, or alternatively, you can run ResourcesExtract in command-line mode without displaying any user interface.
HashMyFiles v1.43
HashMyFiles is small utility that allows you to calculate the MD5 and SHA1 hashes of one or more files in your system. You can easily copy the MD5/SHA1 hashes list into the clipboard, or save them into text/html/xml file.
HashMyFiles can also be launched from the context menu of Windows Explorer, and display the MD5/SHA1 hashes of the selected file or folder.
MetarWeather v1.56
The MetarWeather utility decodes METAR weather reports from around the world, and displays them in a simple weather report table. You can save the weather report into a text or HTML files. MetarWeather can decode METAR reports from a text file, or download the latest reports directly from the Internet.
HtmlDocEdit v1.02
HtmlDocEdit is a simple HTML designer/editor based on the Internet Explorer browser, that allows you to easily edit HTML files without any knowledge in HTML. With HtmlDocEdit you can change the font/color of selected text, add images, add links, add ordered and unordered lists, and more...
ZipInstaller v1.21
The ZipInstaller utility installs and uninstalls applications and utilities that do not provide an internal installation program. You can use this utility to install and uninstall all other utilities in this Web site.
IconsExtract v1.45
Extract icons and cursors from EXE, DLL, CPL, and OCX files and save them as ICO or CUR files.
DotNetResourcesExtract v1.00
DotNetResourcesExtract is a small utility that scan dll/exe files of .NET applications, and extract all .NET embedded resources (Bitmaps, Gifs, HTML files, and so on) stored in them into the folder that you specify. c# source code is available.
WinExplorer v1.30
WinExplorer is a utility that shows all system's windows in hierarchical display.
For every window in the hierarchy, you can view its properties, like handle, class name, caption, size, position and more. You can also modify some properties, like Caption and Visible/Enable.
Source code is included
ExeInfo v1.01
The ExeInfo utility shows general information about executable files (*.exe), dynamic-link libraries (*.dll), ocx files, and drivers files.

Source code is included

pcANYWHERE Hosts Scanner v1.01
This small utility allows you to scan a TCP/IP network and get the list of all pcANYWHERE hosts within that network.
The Visual Basic source code is included !
"Software" 카테고리의 다른 글
  • Sysinternals Utilities (0)2009/01/21
  • NirSoft Freeware Utilities (0)2009/01/21
  • Windows Server 2008 (0)2008/04/27
  • 오류없는 SW 개발을 꿈꾼다 (0)2005/10/12
  • 해커를 움직이는 힘 (0)2005/05/30
2009/01/21 15:36 2009/01/21 15:36
Posted by webdizen
Tags Audio, Browser, Desktop, Freeware, Internet, Monitoring, Network, NirSoft, Password, Programmer, Recovery, System, Tools, Utilities, Video, Web
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3314

Leave your greetings.

[로그인][오픈아이디란?]

Software2008/04/27 08:57

Windows Server 2008


"코알라의 하얀집" 블로그에 포스팅 되어 있는 "Windows Server 2008이 나오면..." 이라는 아티클입니다.

출처 : http://blogs.technet.com/koalra/archive ··· url.aspx

Windows Server 2008이 나오면... (73) - DNS의 변화
Windows Server 2008이 나오면... (72) - Language Pack
Windows Server 2008이 나오면... (71) - 심볼 링크(Symbolic Link)
Windows Server 2008이 나오면... (70) - NTFS 자동 치료
Windows Server 2008이 나오면... (69) - 스타터 GPO on GPMC 2.0
Windows Server 2008이 나오면... (68) - In-Place Upgrade to Windows Server 2008
Windows Server 2008이 나오면... (67) - Exchange Server 2007과의 궁합?
Windows Server 2008이 나오면... (66) - Disk Management in Server Core
Windows Server 2008이 나오면... (65) - Look and Feel in Server Core Part.2
Windows Server 2008이 나오면... (64) - Look and Feel in Server Core Part.1
Windows Server 2008이 나오면... (63) - NetSH in Server Core
Windows Server 2008이 나오면... (62) - Hyper-V on Server Core
Windows Server 2008이 나오면... (61) - Windows Server 2008 서비스 계정 보안 비교
Windows Server 2008이 나오면... (60) - TS Web Access with Silverlight
Windows Server 2008이 나오면... (59) - 이벤트 로그 전달
Windows Server 2008이 나오면... (58) - SSTP VPN

Windows Server 2008이 나오면... (57) - 고급 그룹 정책 관리 (3)
Windows Server 2008이 나오면... (56) - 고급 그룹 정책 관리 (2)
Windows Server 2008이 나오면... (55) - 고급 그룹 정책 관리 (1)
Windows Server 2008이 나오면... (54) - 권한 부여 규칙 in IIS 7.0
Windows Server 2008이 나오면... (53) - FTP에서 IIS 자체 계정을 이용.. in IIS 7.0
Windows Server 2008이 나오면... (52) - FastCGI in IIS 7.0
Windows Server 2008이 나오면... (51) - 작업자 프로세스 확인 in IIS 7.0
Windows Server 2008이 나오면... (50) - 실패한 요청 추적 in IIS 7.0
Windows Server 2008이 나오면... (49) - 기능 위임 in IIS 7.0
Windows Server 2008이 나오면... (48) - NAP 클라이언트 설정
Windows Server 2008이 나오면... (47) - 관리자 권한 설정 in IIS 7.0
Windows Server 2008이 나오면... (46) - 공유 구성 in IIS 7.0
Windows Server 2008이 나오면... (45) - IIS와 PowerShell의 절묘한 만남?!
Windows Server 2008이 나오면... (44) - MSCS Validation Wizard
Windows Server 2008이 나오면... (43) - Terminal Service RemoteAPP
Windows Server 2008이 나오면... (42) - Terminal Service Web Access
Windows Server 2008이 나오면... (41) - Windows Deployment Services
Windows Server 2008이 나오면... (40) - Active Directory Audit의 변화
Windows Server 2008이 나오면... (39) - Windows Media Service
Windows Server 2008이 나오면... (38) - 분산 파일 시스템(DFS)
Windows Server 2008이 나오면... (37) - Windows Server 2008 Active Directory 구성 요소
Windows Server 2008이 나오면... (36) - Windows Server 2008 기능 구성 요소...
Windows Server 2008이 나오면... (35) - Windows Web Server 2008?
Windows Server 2008이 나오면... (34) - 장비와 NAP이 만났을 때?!
Windows Server 2008이 나오면... (33) - IDA in Microsoft Platform
Windows Server 2008이 나오면... (32) - HRA in NAP
Windows Server 2008이 나오면... (31) - 그룹 정책을 편히 써봅시다. :)
Windows Server 2008이 나오면... (30) - 구성 요소 설치는 어디서 해요?
Windows Server 2008이 나오면... (29) - Network QoS(Quality of Service)
Windows Server 2008이 나오면... (28) - IIS 7 on Server Core
Windows Server 2008이 나오면... (27) - NAP with SCCM
Windows Server 2008이 나오면... (26) - ADRMS
Windows Server 2008이 나오면... (25) - ADFS
Windows Server 2008이 나오면... (24) - FTP on IIS 7.0
Windows Server 2008이 나오면... (23) - Server Core의 가치..
Windows Server 2008이 나오면... (22) - Network Auto-Tuning (2)
Windows Server 2008이 나오면... (21) - Network Auto-Tuning (1)
Windows Server 2008이 나오면... (20) - Active Directory Snapshot
Windows Server 2008이 나오면... (19) - Network Policy Server (3)
Windows Server 2008이 나오면... (18) - Network Policy Server (2)
Windows Server 2008이 나오면... (17) - Network Policy Server (1)
Windows Server 2008이 나오면... (16) - Fine-Grained Password Policy
Windows Server 2008이 나오면... (15) - 주요 기능 데모
Windows Server 2008이 나오면... (14) - SCVMM의 P2V
Windows Server 2008이 나오면... (13) - Windows Powershell
Windows Server 2008이 나오면... (12) - Modulization
Windows Server 2008이 나오면... (11) - PKI, Certificate
Windows Server 2008이 나오면... (10) - Terminal Service Gateway
Windows Server 2008이 나오면... (9) - Terminal Service UX
Windows Server 2008이 나오면... (8) - WS-Management의 시대...
Windows Server 2008이 나오면... (7) - 장애 조치 클러스터
Windows Server 2008이 나오면... (6) - Windows Powershell의 소개
Windows Server 2008이 나오면... (5) - Server Core의 소개
Windows Server 2008이 나오면... (4) - IIS 7.0
Windows Server 2008이 나오면... (3) - NAP
Windows Server 2008이 나오면... (2) - Active Directory의 변화
Windows Server 2008이 나오면... (1) - 변경된 기능 요약

"Software" 카테고리의 다른 글
  • Sysinternals Utilities (0)2009/01/21
  • NirSoft Freeware Utilities (0)2009/01/21
  • Windows Server 2008 (0)2008/04/27
  • 오류없는 SW 개발을 꿈꾼다 (0)2005/10/12
  • 해커를 움직이는 힘 (0)2005/05/30
2008/04/27 08:57 2008/04/27 08:57
Posted by webdizen
Tags Active Directory, ADFS, ADRMS, DFS, DNS, Exchange Server 2007, FastCGI, GPMC 2.0, GPO, HRA, Hyper-V, IDA, IIS 7.0, NAP, NetSH, Network Auto-Tuning, Network Policy Server, NTFS, Powershell, QoS, SCCM, SSTP VPN, TS, UX, Windows Server 2008, 심볼 링크
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/3210

Leave your greetings.

[로그인][오픈아이디란?]

Software2005/10/12 17:25

오류없는 SW 개발을 꿈꾼다

이광근

아이락은 C 프로그램 실행 중에 발생할 수 있는 버퍼오버런 에러를 프로그램 실행 전에 자동으로 빠짐없이 찾아 주는 프로그램 분석기이다. 이 분석기는 요약 해석의 틀 속에서 설계됐으며, 리눅스 커널, GNU 프로그램, 상용 임베디드 소프트웨어에 적용되어 실제 버그를 찾아냈다. 또한 아이락은 정적 프로그램 분석으로부터 기인하는 허위 경보에 유연하게 대처할 수 있는 기능을 제공한다.


프로그램이 버그 없이 안전하게 실행되는지를 100% 보장할 수 없을까? 우리는 많은 컴퓨터 프로그램들이 아무런 문제없이 안전하게 돌아간다는 보장도 없이 그 프로그램에 의존해 살아가고 있다. 일례로, 서울 시내버스 교통카드 시스템의 마비라든지, 휴대폰의 버그 등 소프트웨어 장애는 이미 우리 일상에 악영향을 미치고 있다. 지구상 곳곳에 존재하는 컴퓨터에서 돌아가는 프로그램들에 우글거리는 버그들이 한꺼번에 나타난다고 상상해보라. 이 얼마나 끔찍한 일이 되겠는가? 하지만 다행히도 컴퓨터의 발달과 함께 오랜 시간에 걸쳐 프로그램의 버그를 줄일 수 있는 많은 기술들이 개발되어 왔다.

1970년대 제일 처음 모습을 드러낸 버그 잡는 기술은 바로 프로그램이 제대로 생겼는지를 검증해 내는 구문 검증 기술(parsing)이다. 이 기술은 이미 우리가 너무나 익숙하게 사용하고 있기에 지금은 거의 관심을 두지 않고 있다. 하지만 이 기술 덕분에 더 이상 우리가 짠 프로그램에서 저지른 문법 실수를 일일이 눈으로 확인해서 찾지 않아도 된다. 가령, C 프로그램에서 세미콜론(;)을 빠뜨렸을 때 이를 찾기 위해 고생하는 프로그래머는 없는 것처럼 말이다. 그러나 제대로 생긴 프로그램이라고 모두 문제없이 돌아가는 것은 아니다. 예를 들어 x = “버그” + 10 같은 프로그램은 생긴 것은 멀쩡하지만 하는 일은 전혀 그렇지 않다.

이런 프로그램들을 안전하게 걸러내기 위해 1990년대에 활성화된 기술이 바로 타입 검증(type checking)이다. 타입에 맞지 않는 프로그램들은 실행 중에 계산할 수 없게 되어 예측할 수 없는 방향으로 프로그램이 실행되거나 혹은 원인도 모르게 비정상 종료된다. 따라서 프로그램의 모든 연산에서 다루는 값들은 항상 정의된 타입에 맞는 값들이어야 한다. 어떤 프로그램이 항상 그러한 성질을 만족하면서 실행될 것인지를 자동으로 검증해 주는 것이 바로 타입 검증 기술이다.

한편, 타입이 맞는 프로그램이라고 해도 모두 제대로 실행된다고 할 수는 없다. 타입보다 더욱 정교한 성질에 대한 보장이 필요한 것이다. 물을 만들기 위해서는 수소와 산소가 있어야지 수소랑 질소가 만나서는 안 된다는 사실을 검증하는 것은 타입 검증과 비슷하다. 하지만 물 100g 이상을 만들기 위해서는 적어도 수소 몇 g과 산소 몇 g이 필요하다는 사실까지의 검증은 더 정교한 기술을 필요로 한다.

자동 증명 기술(theorem proving)과 정적 분석 기술(static analy sis)이 바로 그러한 정교한 프로그램의 버그 잡는 기술의 예이다. 이러한 기술들은 우리가 분석하고자 하는 프로그램의 성질을 정교한 논리식으로 정의하고 그 식을 만족하는 지를 온갖 방법을 동원해 찾아낸다. 대게 이러한 정교한 분석들은 많은 시간과 자원을 필요로 하기 때문에 아직은 컴파일러에 장착될 정도는 되지 못한다. 모든 사람들이 이 기술을 아무렇지도 않게 사용할 날이 아직은 멀어 보이지만, 지금 이 순간에도 전 세계의 수많은 사람들이 이 기술을 더 쓸 만하게 만들어나가고 있다.

정적 프로그램 분석
정적 프로그램 분석(static program analysis)은 프로그램의 성질을 실행 전에 자동으로 안전하게 빠짐없이 예측하는 기술이다. 사실 프로그램의 성질(버그)을 실행 전에 정확히 알아내기란 불가능하다. 하지만 프로그램 분석 분야에서는 오랜 기간 동안 사람들이 이 한계에 도전해 왔고, 프로그램의 성질을 실행 전에 미리 알아내는 것이 어느 정도 가능하게 되었다.

예를 들어 다음 날의 날씨를 예측하는 기계가 있다고 치자. 그런데 다음 날 비가 올 지를 정확하게 예측하는 것은 잘 알고 있듯이 불가능한 일이다. 우리는 다음 날 비가 온다면 반드시 이 기계가 비가 온다고 미리 말해주기를 원한다. 사실, 이러한 조건을 만족하는 기계를 만드는 것은 아주 쉽다. 항상 비가 온다고 말하는 기계를 만들어 버리면 되는 것이다. 그런데 이런 기계는 아무런 정보도 주지 못하므로 쓸모가 없다. 쓸모 있는 기계를 만들기 위해 우리가 할 수 있는 최선은 다음날 비가 오지 않는 것이 확실한 경우에는 기계가 비가 온다는 말을 하지 않게 하는 것이다. 여기서 말하고자 하는 프로그램 분석 기술도 이와 비슷하다.

안전하고 정확한 분석기란 버그가 있을 수 있는 곳에서는 항상 경고를 해주면서 실제로 문제가 없는 것이 명백한 곳은 많이 피해가는 것이다. 버그가 있을 만한 곳은 모두 찾아주기 때문에 ‘빠짐없는, 안전한’ 분석기이다. 어떤 방법이 이러한 기술을 가능하게 하는 지 살펴보자. 알고 보면 정말 간단하다. 프로그램이 실행 중에 일어날 수 있는 모든 일을 실행 전에 예측할 수 있으면 된다. 프로그램의 모든 부분에서 일어날 수 있는 모든 실행 상태들을 계산해 내면 되는 일이다. 다음의 간단한 코드를 보자.

int main( )
{
int x, idx;
x = 0;
while (x<100) {
idx = rand()%10;
x = x + 1;
}
return 0;
}


우리가 알고 싶은 프로그램의 성질이 만약 이 프로그램이 끝나기 전에 메모리에 있는 변수들이 가지고 있는 값들이라고 생각해보자. 그럼 실제로 실행해보면 어떻게 될까? 변수 x에 저장된 값은 루프(loop)을 돌고 난 후의 값이니 100이 되어 있을 테고, 변수 idx에 저장된 값은 0부터 9 사이의 임의의 값을 하나 갖게 될 것이다. 그렇다면 정적 프로그램 분석의 결과는 무엇이 되어야 안전하겠는가?

변수 i의 값은 100이고 변수 idx의 값은 0에서부터 9사이의 모든 값이라고 하면 안전한 분석이다. 실제 실행 중에 일어날 수 있는 모든 것을 포섭하고 있기 때문이다. 물론 더 많은 것을 이야기해도 안전하다. 예를 들면 변수 i의 값은 100 이상이고 idx는 모든 값이 될 수 있다고 이야기하는 것이 되겠다. 하지만 이것은 첫 번째 분석 결과보다 더 많은 집합을 이야기하고 있으므로 부정확하다. 분석 결과로 정확히 알고 싶은 것이 2라는 값이었다면 정수, 짝수, 0보다 큰 짝수, 0하고 10 사이의 짝수라고 이야기하는 것들은 안전하지만 부정확한 분석 결과이다.

테스트를 통한 디버깅의 한계
정적 프로그램 분석이 프로그램을 실제로 돌려가며 테스트를 통해 디버깅하는 것과 다른 점은 무엇일까? 가장 중요한 차이는 정적 프로그램 분석은 실행 중에 일어날 수 있는 모든 것을 포섭하지만 테스트는 그렇지 못하다는 것이다. 앞의 코드만 보더라도 실제로 수백 번의 테스트를 하더라도 변수 idx가 가지는 값들을 전부 찾아낸다는 보장을 할 수 없다. 이와 같이 간단한 코드에서조차도 힘들진대 실제 현장에서 개발하고 있는 커다란 프로그램에 대해서는 어떻겠는가? 또, 한 번 실행을 하는데 오랜 시간이 걸리거나 프로그램의 입력으로 될 수 있는 값들의 개수가 무한하거나 혹은 끝나지 않는 프로그램들을 테스트를 통해서 검증해내기란 정말 어려운 일이다. 그런 면에서 테스트를 통한 검증은 근본적으로 한계를 지니며, 프로그램에 버그가 없다는 사실이 아니라 단지 버그가 있는 지만 확인할 수 있다.

정적 프로그램 분석 기술의 적용
실제로 프로그램 분석 기술을 사용하여 유용한 일을 해낸 외국의 사례들을 살펴보자. 윈도우 98을 사용하던 대부분의 많은 사람들은 이유도 모른 채 발생하는 블루스크린에 짜증이 난 경험이 있을 것이다. 윈도우 XP에서는 블루스크린을 거의 볼 수 없게 되었는데 그 이면에는 마이크로소프트(이하 MS) 내부에서 버그 잡는 기술에 대한 투자가 있었다.

그 한 예가 바로 슬램(SLAM) 프로젝트이다. SLAM은 MS 연구소에서 프로그램이 원하는 속성을 만족하는지 검증하고 버그를 발견해 주어 신뢰성 높은 소프트웨어를 제작토록 도와주기 위한 프로젝트이다. MS는 SLAM 프로젝트의 결과물을 이용하여 윈도우 XP가 사용하는 디바이스 드라이버(device driver)의 버그들을 찾아내고 있다. 윈도우의 많은 버그들 중에는 드라이버에서 발생하는 버그들이 특히 많은데, 왜냐하면 이런 드라이버들은 새로운 기기가 추가될 때마다 새로이 작성되고 개발자들이 보통의 운영체제를 개발한 쪽과 다르기 때문이다. SLAM의 결과물로 현재 100여 개의 드라이버에 대해 20여 개의 속성을 검증하여 20개 이상의 버그를 찾아냈다고 한다.

Bandera는 자바로 작성된 프로그램이 올바르게 작동하는지를 검증해주는 프로그래밍 도구이다. 특히 여러 쓰레드(thread)가 동시에 (concurrent) 수행되는 경우에 발생 가능한 오류를 찾아준다. 예를 들어, 모든 쓰레드가 서로를 기다리기만 하는 교착 상태(dead lock)에 빠지지 않는지, 또는 무한정 어떤 조건이 만족되기를 기다리기만 하는 쓰레드가 없는지 검사해 준다. Bandera는 캔사스 주립 대학에서 1998년부터 개발해왔고 실제 현장에 적용되고 있다. NASA와 하니웰 테크놀로지 센터(Honeywell technology center)에서 Ban dera를 사용하여 개발하는 소프트웨어를 검증하고 있다. 특히 하니웰 테크놀로지 센터는 Bandera를 이용하여 항공 운항을 위한 실시간 운영체제인 DEOS(Digital Engine Operating System)에서 오류를 찾아냈고 수정할 수 있었다.

또 다른 예로 AirBus의 컨트롤러 소프트웨어 모듈 검증이 프로그램 분석 기술을 통해 성공적으로 이뤄졌다. 기존에 의존하던 다른 검증 기술(verification by theorem proving)보다 그 비용과 효과가 뛰어났기 때문에 AirBus에서는 비행기 내장 소프트웨어 개발에 프로그램 분석 기술을 통한 검증 단계가 반드시 들어가도록 표준 개발 과정을 개편하고 있다.

요약 해석
초등학교 교실의 산수 시간. 선생님이 정수식 계산 문제 하나를 학생들에게 내준다.

문제 : 128 쪱 22 + (1920 쪱 (-10)) + 4 = ?


0.1 초 후에 철호가 정수라는 답을 제시하는 것을 시작으로 시간이 흐름에 따라 영호, 진호, 명호, 상호가 점점 더 정확한 답을 얘기한다.

철호: 정수
영호: 짝수
진호: 음수
명호: -100000보다 크고 10000보다 작은 정수
상호: -16380


철호, 영호, 진호, 명호, 상호 등의 답은 모두 옳다고 할 수 있다. 다만 정확도에는 차이가 난다. 모두 옳다는 얘기는 각각이 제시한 답 속에 정확한 답 -16380이 포함되기 때문이다. 정확도의 차이는 각 답들이 제시하는 집합의 크기에서 기인한다. 마지막 상호의 답이 가장 정확한데 상호의 답은 하나의 원소만 가지고 있기 때문이다. 짝수라는 답을 얘기한 영호의 머리 속을 잠시 들여다보자. 영호는 모든 정수는 홀수와 짝수 집합의 한 원소에 대응시킬 수 있다는 사실을 알고 있었을 것이다. 그리고 짝수와 짝수의 합은 짝수, 짝수와 짝수의 곱은 짝수, 홀수와 짝수의 합은 홀수가 된다는 식의 홀수, 짝수 계산법을 알고 있었을 것이다. 영호의 머리 속에서 주어진 문제는 “짝수 × 짝수 + 짝수 × 짝수 + 짝수”라는 문제로 바뀐 후, 알고 있는 홀수, 짝수 계산법이 적용되어 최종적으로 짝수라는 답에 이르게 되었을 것이다.

요약 해석(abstract interpretation)이라는 것은 영호가 했던 일을 컴퓨터 프로그램에 적용하는 것이라고 볼 수 있다. 주어진 프로그램이 어떻게 실행될 지를 정의해 주는 것을 프로그램의 의미(seman tics)라 한다. 프로그램의 실행을 정의하는 방법은 다양하지만 어떤 방법이든지 프로그램의 실행을 정의하는 데 필요한 값들이 돌아다니는 공간(이하 도메인)을 명확히 할 필요가 있다. 예를 들면, 계산식을 위해서는 정수 도메인이 필요하고, 포인터를 다루기 위해서는 메모리 주소를 원소로 가지는 도메인이 필요할 것이다. 또 대입문(assign ment statement)을 위해서는 주소에 값을 대응시키는 함수들의 집합인 메모리라는 도메인이 있어야 할 것이다.

요약 해석은 주어진 프로그램을 프로그램의 실제 실행을 정의하는 도메인 대신에 요약된 도메인(예를 들어 정수의 요약 도메인으로서의 홀수, 짝수 집합)에서 실행하면서 실제 프로그램이 실행 중에 가질 수 있는 값들을 모두 포섭하는 결과 값을 계산해내는 분석이라고 할 수 있다. 만일 요약 해석(abstract interpretation)이 요약 도메인 상에서의 프로그램 실행에만 관한 내용이라면 요약 해석은 하나의 아이디어에 지나지 않을 것이다. 요약 해석이 훌륭한 이유는 요약된 도메인에서 얻은 프로그램 실행의 결과가 실제 프로그램 실행의 결과를 온전하게 포섭하는 것이 보장되는 올바른 분석을 디자인할 수 있는 틀(framework)을 제공해주기 때문이다. 영호가 주어진 정수식의 답으로 짝수를 제시했는데, 이것이 옳다는 것(직관적으로는 옳지만)은 어떻게 증명할 수 있을까? 모든 정수식에 대해서 영호식의 계산법으로 얻은 답이 실제 계산식의 계산 결과를 포섭함을 증명하는 것은 답이 뻔히 보이는 간단한 문제는 아니다.

아이락 설계
아이락(Airac, Array Index Range Analyzer for C)은 이러한 요약 해석의 틀 속에서 설계하고 구현했다. 요약 해석의 틀 속에서 아이락이 프로그램의 실제 실행을 어떻게 요약하는 지 예를 통해 살펴보자. 아이락은 주어진 프로그램이 잘못된 배열 참조를 하는 경우가 있는 지 없는 지를 분석하는 것을 목표로 하고 있다. 그러므로 아이락이 사용하는 요약 도메인은 영호의 것처럼 홀수, 짝수만으로 이뤄져있어서는 제대로 된 분석 결과를 내놓지 못할 것이다. 아이락의 분석 목표에 맞는 수준의 요약 도메인이 필요한 것이다.

아이락은 프로그램에 있는 수식 값들의 요약 도메인으로 구간(interval)이라는 도메인을 이용한다. [a,b]로 표시되는 구간 도메인의 원소는 a보다는 크거나 같고, b보다는 작거나 같은 수들의 집합을 의미한다. 또 특별히 ∞ 기호를 이용해서 크기가 무한한 집합을 의미하는 구간을 나타낼 수도 있다. 즉 [ -∞, +∞ ]은 모든 수 전체를 의미하는 구간이 된다. 구간 도메인의 원소 간에는 순서(order)도 정의할 수 있다. 구간 a, b 간의 순서 ⊆는 구간 a가 구간 b에 포함되는 경우 a ⊆ b로 나타낸다. 그리고 모든 구간보다 작은 구간을 특별히 기호 ⊥로 나타낸다.

배열은 배열의 요약된 시작 주소, 배열의 크기 구간, 그리고 현재 포인터가 가리키고 있는 배열의 오프셋(offset) 구간을 가지는 값으로 요약된다. 메모리는 메모리가 할당된 프로그램 상의 위치로 요약된다. 이를 위해 아이락은 프로그램의 모든 식, 명령문, 선언 등에 고유한 레이블을 할당한다. 다음의 프로그램을 생각해보자.

int a[10], *p;
p = a + 3;


아이락의 요약 도메인에서 이 프로그램을 실행하고 나면 a는 쨦l0, [10, 10], [0, 0]쨧을, p는 쨦l0, [10, 10], [3, 3]쨧을 가지게 된다. 여기서 l0는 배열 선언 a[10]에 할당된 레이블이다. 아이락은 프로그램의 모든 배열의 크기와 그 배열 접근에 이용되는 인덱스의 값을 구간으로 요약한 후, 인덱스 구간이 크기 구간 외의 값을 가질 가능성이 있을 때 버퍼 오버플로우가 날 수 있다는 알람을 발생시킨다.
앞에서 예로 든 프로그램의 일부를 담고 있는 다음의 프로그램을 통해 아이락이 프로그램을 구간으로 요약하는 과정을 알아보자.

x = 0; ?
while(x<10) {
? x = x+1; ?
} ?


이 프로그램의 실행으로 프로그램의 각 지점(프로그램 포인트)에서 변수 x가 가질 수 있는 값(구간)은 무엇이 될까? 상식적으로 접근해보자. 우선 프로그램 포인트 ?에서 x는 x = 0;의 실행 결과로 0을 값으로 가질 것이다. 프로그램 포인트 ?에서는 프로그램 포인트 ?과 같은 값을 가질 것이고, 프로그램 포인트 ?에서는 x = x+1;의 실행 결과로 프로그램 포인트 ?보다 1 큰 값을 가질 것이다. 프로그램 실행 흐름은 여기까지 이른 후에 다시 프로그램 포인트 ?로 돌아가므로 프로그램 포인트 ?에서 x는 이제 0 또는 1의 값(구간으로 표현하면 [0,1])을 가진다고 할 수 있다. 이런 식으로 생각을 해보면 x는 프로그램 포인트 ?에서는 [0,10], 프로그램 포인트 ?에서는 [0,9], 프로그램 포인트 ?에서는 [1,10] 마지막으로 프로그램 포인트 ?에서는 [10,10]의 값을 가진다고 할 수 있을 것이다.

이 과정을 구현한 프로그램 분석기는 어떻게 만들 수 있을까? 이렇게 접근해보자. 우선 우리가 알고 싶은 것, 즉 각 프로그램 포인트에서 변수 x가 가질 수 있는 값을 미지수로 가지는 방정식을 세우자. 그리고 구간 도메인 상에서 이 방정식을 풀자. 그러면 그 방정식의 해가 바로 우리가 원하는 분석 결과가 될 것이다. 각 프로그램 포인트 ?에서 x가 가지는 값을 Xi라는 미지수로 표현하자. 프로그램의 실행 의미를 생각하면 다음과 같은 방정식을 만들어 갈 수 있을 것이다. 우선 자연어로 방정식을 표현해보자.

X1=[0,0] 또는 X3
X2=X1이면서 x<10을 만족 = X1에 포함되고 [-∞, 9]에도 포함됨
X3=X2에 [1,1]을 더함
X4=X1이면서 x>=10을 만족 = X1에 포함되고 [10, +∞]에도 포함됨


우리가 원하는 분석은 프로그램의 실제 실행을 포섭하는 것이어야 한다는 점과 분석 결과가 실제를 포섭하면서도 결과가 나타내는 집합의 크기가 작을수록 분석의 정확도가 높다는 점을 상기하자. “X1 = [0, 0] 또는 X3”에서 좌변을 [-∞, +∞]로 바꿔도 틀리지는 않다. 하지만 정확도는 가장 낮다고 할 수 있다. [-∞, +∞]은 모든 수의 집합을 의미하기 때문이다. 그러면 “[0, 0] 또는 X3”을 포섭하면서 가장 작은 값은 어떻게 나타내면 좋을까? 수학시간에 배운 합집합이 바로 우리가 원하는 답이다. 두 집합의 합집합은 둘을 포함하는 최소 집합이므로. 집합세계의 합집합을 구간으로 확장해서 ∪이라는 기호로 쓰자.

예를 들어 [1, 2] ∪ [2, 3]의 결과는 이다. “X1에 포함되고 [-∞, 9]에도 포함됨”은 집합세계의 교집합을 이용해서 나타낼 수 있을 것이다. 기호로는 ∩을 사용하자. 예를 들어 [1, 2] ∩ [2, 3]의 결과는 [2, 2]가 될 것이다. 구간 간의 덧셈은 ?로 쓰고, [a, b] ? [c, d] = [a+c, b+d]로 정의하자. 이 정의는 각 구간에 포함되는 모든 수들 사이의 덧셈 결과를 포함하는 최소 구간을 의미한다. 이제 자연어로 썼던 방정식은 다음과 같은 모양이 된다.

X1 = [0, 0] ∪ X3
X2 = X1 ∩ [-∞, 9]
X3 = X2 ? [1, 1]
X4 = X1 ∩ [10, +∞]


자, 이제 어떻게 풀어야 할지는 모르겠지만, 모양은 그럴 듯한 방정식을 얻었다. 이제 우리의 목표는 이 방정식의 해 중에서 구간 도메인의 순서 기준으로 가급적 작은 해를 구하는 것이다. 우리의 방정식을 조금 다르게 표현해보자.

(X1, X2, X3, X4) = F (X1, X2, X3, X4)
F (X1, X2, X3, X4) = ([0, 0] ∪ X3, X1 ∩ [-∞, 9], X2 ? [1, 1], X1 ∩ [10, +∞]


방정식을 이와 같이 바꿔 쓰면 우리가 원하는 해는 함수 F의 고정점(fixpoint)이라고 할 수 있다. 함수의 고정점이란 함수의 입력과 출력이 같게 되는 값을 의미한다. 즉, 함수 f에 대해 f(x) = x를 만족하는 x가 함수 f의 고정점이다. 만일 이런 가 둘 이상 있고 그들 간에 순서가 있다면 그 중에서 가장 작은 값을 최소 고정점(least fixpoint)이라고 한다. 특정 조건을 만족하는 경우 함수의 고정점을 구하는 기계적인 방법이 존재한다. 그 방법은 함수가 정의된 도메인의 최소 원소에 함수 적용 값이 변하지 않을 때까지 함수를 계속 적용하는 것이다. 함수 F의 k번 적용을 의미하는 Fk를 다음과 같이 정의하자.

F0(⊥, ⊥, ⊥, ⊥) = (⊥, ⊥ ⊥, ⊥)
Fn+1 (⊥, ⊥, ⊥, ⊥) = F(Fn(⊥, ⊥ ⊥, ⊥)) (n 쨧 0)


우리의 경우 Fk+1 (⊥, ⊥, ⊥, ⊥) = Fk(⊥, ⊥ ⊥, ⊥)이 될 때까지 k + 1번 함수 F를 적용하면 된다. <표 1>은 함수 F를 적용해 가는 과정을 보여주고 있다. k가 14인 경우 13일 때와 다른 값을 가지는 Xi의 값이 없음을 보여준다. 즉 함수 를 13번 적용해서 고정점에 도달했으며 이를 14번째 적용에서 확인한 것이다. 최종 결과가 앞서의 상식적인 접근으로 얻은 결과와 일치함을 확인하자. 이제 루프의 조건이 외부 입력으로 결정되도록 분석 대상 프로그램을 조금 바꿔 보자.

n = readint()
x = 0; ?
while(x ? x = x+1; ?
} ?


변수 n의 값은 외부 입력으로 결정되므로 어떤 값이든지 될 수 있다. 구간으로는 [-∞, +∞]에 해당한다. 이 프로그램에 대한 방정식은 다음과 같다.

X1 = [0, 0] ∪ X3
X2 = X1 ∩ [-∞, +∞] = X1
X3 = X2 ? [1, 1]
X4 = X1 ∩ [-∞, +∞] = X1


이 방정식의 답을 구하는 계산은 끝이 나지 않는다. 함수를 k(>1)번 반복 적용한 후의 X0은 [0, k-2]가 된다. 보통의 방법으로는 고정점에 도달하지 못하는 것이다. 어떻게 하면 될까? 우리의 목표가 실제 일어날 수 있는 상황과 정확히 일치하는 분석 결과를 얻는 것이 아니라 실제 상황을 포섭하는 분석 결과를 얻는 것이라는 점을 생각하면 해결책을 구할 수 있다. 해결책은 방적식의 답을 포섭하면서 구간이 커질 수 있는 횟수를 제한하는 것이다. 이를 넓히기(widening)라고 한다.

X1에 대해 [0, 0] ∪ [1, 1]의 값으로 [0, 1] 대신에 [0, +∞]을 취한다면 다음번 함수 적용에서도 [0, +∞]이 되므로 함수 적용을 멈출 수 있게 된다. 이런 넓히기를 적절히 이용하면 어떤 프로그램이 주어지더라도 항상 유한한 시간 내에 분석을 완료할 수 있게 된다. 하지만 넓히기를 불필요하게 많이 사용하면 분석의 정확도는 떨어지게 된다. 이를 방지하기 위해서는 넓히기를 적용하는 경우를 최소화하는 방법과 넓히기로 인해 떨어진 정확도를 보정할 방법이 필요하다. 넓히기는 while 등의 반복문, 재귀 함수 등으로 생기는 루프의 시작점에서만 적용하면 된다. 사실 루프의 반복 횟수가 유한하다면 굳이 넓히기를 사용하지 않아도 유한한 시간 내에 분석을 끝낼 수가 있다.


그러나 루프의 반복 횟수가 유한할 지의 여부를 결정할 일반적인 방법은 없기 때문에, 모든 루프에 대해 넓히기를 적용해야만 항상 유한한 시간 내에 분석이 끝남을 보장할 수 있다. 그리고 여기서는 소개하지 않겠지만, 넓히기 후에 좁히기(narrowing)를 적용하면 넓히기로 떨어진 정확도를 상당 부분 보정할 수 있다. 아이락은 프로그램의 요약 도메인 설계, 프로그램으로부터 방정식을 도출하는 방법과 방정식의 해를 구하는 방법 등을 요약 해석이 제시하는 프레임워크 내에서 설계하고 구현하였다. 따라서 아이락은 ‘프로그램의 분석 결과가 프로그램의 실제 실행에서 일어날 모든 상황을 포섭함’을 보장받게 된다.

아이락 분석 예
이제, 아이락이 실제 소프트웨어에서 찾아내는 오류들을 살펴보자

리눅스 커널 2.6.4 장치 드라이버
리눅스 커널 2.6.4의 USB 모뎀 드라이버와 관련된 /drivers/usb/ class/cdc-acm.c 파일의 일부분이 다음과 같다.

static struct acm *acm_table[ACM_TTY_MINORS];
...

static int acm_probe (struct usb_interface *intf,
const struct usb_device_id *id)
{
...
for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
if (acm_table[minor]) {
err(“no more free acm devices”);
return -ENODEV;
}
...
acm_table[minor] = acm;
...
}


acm_table이라는 배열이 ACM_TTY_MINORS의 크기로 선언되어 있다. acm_probe라는 함수의 한 부분에서 for를 돌면서 acm_table에서 0인 곳을 찾는다. 그리고 그 뒤에 이 칸을 채우는 일을 하는데, for 바로 다음부터 프로그래머가 실수를 한 것으로 보인다. for를 돌면서 minor 변수는 0부터 ACM_TTY_MINORS-1까지의 값을 가질 수 있다. 이 구간에 속한 minor 값으로 ACM_TTY_ MINORS 크기의 acm_table 배열을 접근하는 것은 올바른 코드이므로 아이락은 for의 조건에 대해서는 경보를 내지 않는다. 그러나 for가 끝난 뒤부터는 minor가 ACM_TTY_MINORS의 값을 갖거나 mi nor가 [0, ACM_TTY_MINORS]의 값을 갖고 acm_table [minor]가 0을 갖는다.

아마도 이 부분을 짠 프로그래머는 for가 끝난 뒤에도 acm_ table[minor] 칸이 0이 아니라면 원하는 minor 값을 찾지 못한 것이므로 오류 값을 돌려주려는 의도였을 것이다. 하지만 acm_table에서 값이 0인 칸을 찾지 못한다면 minor는 무조건 ACM_TTY_MINORS라는 값을 가지며 이러한 인덱스로 acm_table을 참조하면 안 된다는 사실을 간과한 모양이다. 아이락은 [0, ACM_TTY_MINORS]의 값을 갖는 minor로 크기가 ACM_TTY_MINORS인 acm_table 배열을 접근할 수 있다고 for 다음에 나온 모든 관련 코드에 대해서 경보를 낸다.

GNU tar의 rmt.c
앞서 설명한 리눅스 커널의 예와 비슷한 경우다. GNU tar 1.13의 src/rmt.c의 125번째 줄에 다음과 같은 get_string 함수가 있다.

main (int argc, char *const *argv)
{
...
char device_string[STRING_SIZE];
get_string (device_string);
...
}

static void
get_string (char *string)
{
int counter;

for (counter = 0; counter < STRING_SIZE; counter++)
{
if (safe_read (STDIN_FILENO, string + counter, 1) != 1)
exit (EXIT_SUCCESS);

빠뜨린 예외 처리
다음은 실제로 제품에 사용됐던 어떤 임베디드 소프트웨어의 일부분이다.

static EVENTQUEUE *_inputQueue[MAX_NUM_QUEUE];
...

int ew_Os_CheckInputEvent (ULONG qid, EVENT *pEvent) {
int curQ = ew_GetQueue( qid );
if( curQ < 0 )
return ERR_FATAL;
if( _inputQueue[curQ]->getPos >= DF_MAX_EVENT_ITEM )
return ERR_FATAL;
...
}

int ew_Os_UpdatePos (ULONG qid, int type, int x, int y) {
int curQ;
curQ = ew_GetQueue( qid );
if((_inputQueue[curQ]->eventItem[_inputQueue[curQ]->getPos]).type != type)
return ERR_FATAL;
...
}

int ew_GetQueue( unsigned long qID ) {
int i = qID - QID_SEED;
if( _inputQueue[i] == NULL_Q ) return -1;
if( i >= MAX_NUM_QUEUE || i < 0 ) return -1;
return i;
}


ew_GetQueue는 배열의 인덱스를 돌려주는 함수인데, 어떤 상황에는 예외를 의미하는 -1을 돌려주기도 한다. ew_GetQueue를 사용할 때에는 프로그래머가 예외의 경우인지 먼저 검사한 뒤에 정상적인 경우에만 배열 참조에 그 결과를 사용해야 하는데, 이를 실수로 빠뜨리고 프로그램을 짜는 경우가 생긴다.

아이락은 앞의 ew_GetQueue라는 함수가 [-1, MAX_NUM_ QUEUE-1]의 값을 돌려준다는 것과 _inputQueue 배열의 크기가 MAX_NUM_QUEUE라는 사실을 분석해낸다. ew_Os_CheckInput Event 함수 안에서 ew_GetQueue의 결과를 담은 curQ가 0보다 작은 경우에는 함수를 끝내므로 그 아래를 진행할 때에는 curQ가 [0, MAX_NUM_QUEUE-1]의 값을 가진다는 사실을 안다. 따라서 curQ를 _inputQueue의 인덱스로 사용하는 것에는 아무런 문제가 없으므로 아이락은 여기서 경보를 내지 않는다. 그러나 ew_Os_ UpdatePos 함수에서는 ew_GetQueue가 돌려준 [-1, MAX_NUM_ QUEUE-1]의 값 그대로 _inputQueue를 참조할 수 있기 때문에 아이락이 오류가 발생할 수 있다고 경보를 내며 배열의 크기와 인덱스 값을 알려준다. 아이락은 이렇게 프로그래머가 실수로 예외처리를 빠뜨린 경우를 정확히 찾아준다.


앞에서 소스코드와 함께 소개한 분석 결과를 살펴보면 프로그래머가 만들어내는 오류들은 그 형태가 의외로 간단하다. 그러나 이렇게 간단한 구조의 오류들이라도 전체 프로그램 코드가 매우 큰 경우에는 사람의 손으로 찾아내기가 결코 쉽지 않다. 프로그래밍이란 아주 작은 실수에도 깨질 수 있는 매우 섬세한 조각들을 서로 정교하게 이어 붙여서 원하는 일을 하는 구조물을 만드는 작업이다.

어느 한 부분이 살짝이라도 어긋나 있다면 구조물 전체를 와르르 무너뜨리는 것이 바로 프로그램의 버그다. 해야 할 일이 명확하며 이를 비교적 체계적으로 구현한 프로그램에서 어긋난 부분들이란 앞서 살펴본 예들과 같이, 보통 사소한 실수에서 비롯되기 마련이다. 사소한 실수들이지만 커다란 프로그램의 구석구석에 숨어있다면, 이를 찾아내는 데에는 그 구조물을 만들어내는 것보다도 더 큰 노력이 필요할 수 있다. 아이락은 이렇듯 사소한 실수로부터 비롯되는 치명적인 문제들을 자동으로, 빠뜨림 없이, 그리고 실행 전에 찾아준다.

아이락의 분석 속도와 정확도
GNU 프로그램, 리눅스 커널과 상용 임베디드 소프트웨어를 대상으로 한 아이락의 분석 결과는 <표 2>와 같다. 펜티엄 4 3.2GHz CPU와 4GB 메모리를 가진 시스템에서 아이락을 돌린 시간이다. 줄 수는 전처리하기 전 C 프로그램의 줄 수이다. 경보 수에서 배열은 경보를 낸 대상 메모리 영역 또는 배열의 수이며, 접근은 그 대상들을 잘못된 인덱스로 참조한 위치의 모두 센 것이다.

이 결과에서 분석 속도는 초당 평균 10줄 정도로 컴파일 시간 등과 비교해볼 때 별로 빠르지 못하다. 그러나 6000줄짜리가 1초도 안 되서 끝나는가 하면, 1200줄짜리가 45초가 넘게 걸리는 등 프로그램이 하는 일에 따라 분석 속도의 편차가 심하다. 물론 개선의 여지는 항상 남아있지만, 아이락이 모든 경우를 다 포함하는 결과를 만들어준다는 사실을 생각해보면 테스트를 통한 검증과는 비교가 안될 만큼 빠른 속도라고 생각할 수도 있겠다.
분석 정확도는 찾아낸 총 1199개의 접근 오류 중에서 199개가 실제 오류로 16.6%이다. 경보가 나오면 이들이 실제 오류인지 아닌지는 사람이 직접 그 진위 여부를 확인해야 한다. 가령, Es* 소프트웨어의 경우를 보자. 162개의 경보 중에서 겨우 6개의 실제 오류를 발견하기 위해 나머지 156군데를 살펴봐야하는 헛수고를 해야만 한다고 생각할 수 있다. 그러나 23만 줄의 프로그램 코드 전체를 살펴보는 대신에 아이락이 짚어준 162 군데만 살펴보면 된다. 실제로 발생할 수 있는 모든 잘못된 배열 참조 문제를 이 162군데만 확인함으로써 찾아낼 수 있다는 것이다. 정확도를 단순히 실제 오류와 경보 수의 비로만 생각할 것이 아니라, 분석한 프로그램의 크기까지도 고려하여 그 효용성을 판단해야 할 것이다.

아이락의 한계
아이락 같은 안전한 프로그램 분석기에서는 분석 속도와 정확도 간의 균형이 상당히 중요하다. 대다수의 경우에 정확도를 높이려다 보면 분석 시간이 늘어나고 분석 속도를 높이려다 보면 정확도가 떨어진다. 아이락의 경우 <표 2>를 보면 알 수 있듯이 사용자가 프로그램을 분석하여 바로바로 분석 결과를 확인하고 이를 바탕으로 디버깅을 할 수 있는 수준의 분석 속도를 갖고 있지는 못하다. 하지만 테스팅을 통해 디버깅하는 과정과 비교해 생각해보면 이 정도의 시간 안에 모든 버그를 빠뜨림 없이 찾아낸다는 것은 유용할 수 있다. 안전한 프로그램 분석기의 분석 결과에는 허위 경보(false alarm)가 들어가지 않을 수가 없다. 허위 경보는 실제로 버그가 아닌 곳을 버그라고 하는 것이다. 안전하게 모든 것을 포섭해서 분석을 하려다 보면 요약하는 과정을 피할 수 없고, 그런 요약은 분석의 정확도를 떨어뜨릴 수밖에 없다. 다음의 코드를 보자.

s=0;
for(i=0;i s += i;
}


이렇게 간단한 프로그램을 분석한다고 했을 때 변수 i가 변수 bound가 가지는 값이라는 사실은 정확히 분석할 수 있지만, 변수 s가 0부터(변수 bound가 가지는 값) - 1까지의 합이라는 것을 정확히 분석하기란 매우 힘들다. 요약 해석의 결과로는 s가 0이상의 수라는 사실 밖에는 알아내지 못한다. 물론 더 구체적인 수를 알아내기 위해서는 더 많은 분석 시간을 사용하면 된다. 하지만 만약 bound가 프로그램의 외부 입력과 같이 모르는 값이라면 어떻게 해야 할까? 안전한 분석을 위해서는 그 모르는 값이 모든 정수라는 가정 하에 분석해야 한다. 모든 정수를 실제 정수들로 표현하면 무한하기 때문에 요약 없이는 분석이 유한한 시간에 끝날 수 없다. 요약은 이렇게 필수적이고 그래서 허위 경보들이 나오는 것이다. 그런데 너무 많은 허위 경보는 분석기의 사용자를 지치게 한다. 경보가 난 몇 군데를 계속 살펴봤는데 모두 실제로는 버그가 아니었다고 판단이 든다면 사용자는 분석기를 믿지 못하게 된다.

이런 허위 경보를 줄일 수 있는 하나의 방법으로 우리는 스팸메일을 걸러내는 방법과 유사한 베이지안 통계 분석(Bayesian statistical analysis)을 사용했다. 실제 스팸메일인 경우들을 어느 정도 알고 있는 상태에서 메일을 받았을 때 그것이 가지고 있는 여러 가지의 증상(symptom)들을 보고 실제로 스팸메일일 확률을 계산하여 분류할 수 있다. 우리도 실제 버그인 곳들을 알고 있는 상태에서 어떤 경보가 나왔을 때 그곳이 가지고 있는 여러 가지의 증상들을 보고 실제 버그일 확률들을 통계적으로 계산해 낼 수 있다. 여기서 증상이라는 것은 경보가 나온 곳이 가지고 있는 문법 구조, 실행 흐름, 분석 중에 나타나는 성질 등 이외에도 특성으로 삼을 수 있는 모든 것들이 될 수 있다.


이 방법의 장점은 분석 결과로 나오는 경보들을 실제 버그들과 허위 경보들로 분류한 정보를 많이 제공하면 할수록 다음 예측이 정확해진다는 점이다. <그림 1>의 그래프는 이 방법을 통해 아이락의 분석결과들이 실제 버그일 확률에 따라 실제 버그들과 허위 경보들의 개수를 그린 것이다.

허위 경보의 분포만을 보면 비교적 바람직한(실제 버그일 확률이 낮을수록 많아지는) 모습을 보여준다. 실제 버그의 경우에는 안타깝게도 확률에 따라 분포하는 모습을 보이지 못하는데, 이는 실제 버그에 대한 정보가 적고 허위경보에 대한 정보만 많기 때문일 거라고 추측하고 있다. 사실 실제 프로그램들에서 실제 버그들을 많이 찾아내기란 쉬운 일이 아니다. 모두들 버그 없는 프로그램들을 짜려고 노력하고, 또 오픈소스들에서는 아직 개발 중인 소스보다 버그가 더욱 드물게 발견된다. 이렇게 실제 버그일 확률을 계산함으로써 우리는 사용자에게 어떤 버그들을 먼저 보여줄 지를 랭킹을 정할 수 있다. 실제 버그일 확률이 높은 경보들을 우선적으로 보여줌으로써 사용자들이 허위 경보에 지치는 것을 최대한 막을 수 있다.

앞으로의 방향
일반적으로 프로그램 분석기란 프로그램이 가질 수 있는 성질을 알아내는 프로그램이다. 그 프로그램 성질 중에 아이락이 관심 있는 성질은 ‘C 프로그램에서 스택이나 힙에 할당될 수 있는 메모리가 항상 처음에 할당되었던 크기 안에서만 사용되는가’이다. 명확히 정의될 수 있는 프로그램의 성질은 모두 분석기의 분석 대상이다. 예를 들어 ‘이 프로그램은 항상 끝나는가’, ‘동적으로 할당되었던 메모리들은 프로그램이 끝나기 전에 모두 해제(free)되는가’, ‘이 프로그램이 실행 중에 사용하는 메모리의 최대 크기는 어느 정도인가’ 등이 프로그램의 성질이 될 수 있다. 따라서 이런 프로그램 성질을 알아내는 분석기는 아이락에서와 마찬가지로 요약 해석 방법을 통해 모두 구현 가능하다.

모든 프로그래밍 언어는 그 언어로 짜여진 모든 프로그램의 의미를 정확히 정의할 수 있기 때문에 모두 분석 대상 언어가 될 수 있다. 즉 앞에서 소개된 C 언어로 변환하는 과정만 구현한다면 C가 아닌 다른 그 어떤 언어도 아이락의 분석 대상 언어가 될 수 있다. 정확도와 분석 속도도 여러 가지 기술들을 이용하여 개선이 가능하다. 앞으로 다양한 프로그램 성질들을 알아낼 수 있는 분석기를 만들려고 하고 있으며, 이와 동시에 분석 대상이 되는 언어도 확장하고, 분석 속도와 정확도를 높이는 방법들에 대한 연구도 진행하고 있다.

분석기 구현은 올바름을 확인하는 작업
실제로 아이락을 구현하면서 처음에 겁도 없이 확인하지도 않고 계단을 밟아 올라가다가 결국 허공을 딛고 굴러 떨어져 처음부터 다시 분석을 디자인하는 허무함을 맛보았었다. 분석기를 만드는 사람은 항상 자신이 하고 있는 작업이 올바른 것인지 끊임없이 확인해야 한다. 그렇지 않으면 자신이 구현한 분석기가 옳다는 것을 증명하지 못할뿐더러 잘못된 결과를 내는 분석기를 만들어 낼 수 있다. 분석기의 정확도, 분석 속도의 향상은 분석기가 올바르다는 전제하에서만 의미가 있다. 올바름을 확인하는 작업은 자신이 무엇을 하고 있는 지 수학적으로 명확히 기술해보는 것에서부터 출발한다.
"Software" 카테고리의 다른 글
  • NirSoft Freeware Utilities (0)2009/01/21
  • Windows Server 2008 (0)2008/04/27
  • 오류없는 SW 개발을 꿈꾼다 (0)2005/10/12
  • 해커를 움직이는 힘 (0)2005/05/30
  • 메인스트림으로 도약하는 리눅스 커널 2.6 -1 (0)2005/05/30
2005/10/12 17:25 2005/10/12 17:25
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1579

Leave your greetings.

[로그인][오픈아이디란?]

Software2005/05/30 01:11

해커를 움직이는 힘

주요 보안업체들이 잇따라 해킹 주의보를 발령하고 있는 가운데 정보보호진흥원이 ‘해커의 선순환’을 내세우며 해킹 동호회에 대한 지원 방안을 마련하고 있다. 지난 2001년 지원이 중단된 지 4년만이다. 지난 1·25 인터넷 대란과 잇따른 크래킹 사건으로 지속적으로 악화돼 온 해킹에 대한 인식에 변화가 생기는 것일까.


해킹이 새롭게 주목받고 있다. 지난해 말 발표된 주요 보안업체들의 전망에 해커의 움직임을 경고하는 내용이 포함된 데 이어, 지난 22일 발표된 시만텍의 인터넷 보안위협 보고서에는 지난해 하반기 기업들이 하루 평균 13.6건의 공격을 받은 것으로 집계됐다. 2004년 상반기에는 하루 평균 10.6건이었다.

해킹의 위협이 높아지고 있는 것은 국내도 마찬가지다. 한국정보보호진흥원이 발표한 2월 인터넷 침해사고 동향 분석 자료에 따르면 2월 국내 해킹 건수는 총 2648건으로 전월에 비하면 크게 감소했지만 지난 해 같은 기간에 비하면 18.2% 증가한 것을 조사됐다. 그러나 1월의 경우 홈페이지 변조 사건이 6478건에 달해 사실상 이 부분을 제외하면 해킹은 꾸준히 증가 추세다.

이처럼 해킹 사고가 늘어나고 있는 이유는 여러 가지가 있다. 세계적인 경기 침체와 함께 직접적으로 금전적인 이해를 노리는 금융 관련 해킹이 크게 증가하고 있으며 <그림 2>처럼 이를 지원하는 해킹 툴도 점점 고도화되고 있다. 해킹에 대한 진입장벽이 낮아졌다는 해석도 있다. 한 해커 출신 컨설턴트는 보안 관련 강좌 커리큘럼을 보면 사실상 해킹 교육인 경우가 많다며 기초적인 지식을 갖고 어설프게 해킹을 시도하는 이른바 ‘스크립트 키디(Script Kiddy)’가 늘어나고 있다고 말했다.


그러나 이와 같은 해킹 사고의 원인 중 상당수는 개발자 혹은 관리자들의 사소한 실수에서 비롯된다. 예를 들면 무선랜을 사용하면서 관리자 패스워드를 admin, password와 같이 디폴트 상태 그대로 사용하는 기업이 의외로 많다. 한국맥아피의 김현수 부장은 “사용자의 오류와 시스템 소프트웨어의 오류, 혹은 개발자의 오류가 복합적으로 맞물려 해킹에 노출되는 사례가 많다”며 “이런 경우에는 어떤 소프트웨어나 장비로도 막을 수 없다”고 말했다.

새로운 타겟, 웹 애플리케이션
최근 해킹의 가장 큰 특징은 유닉스 시스템의 패스워드를 알아내는 전통적인 시스템 해킹이 웹 애플리케이션에 대한 공격으로 바뀌고 있다는 점이다. 과거에는 운영체제에 대한 해킹 시도가 주류였으나 이제는 웹 애플리케이션을 분석해 비슷한 계열의 타겟 소프트웨어를 공격하는데 주력하고 있다. 이는 방화벽과 침입탐지시스템(IDS)이 보급되면서 웹을 이용하는데 필요한 80 포트를 제외한 다른 포트를 철저하게 통제해 시스템 해킹에 대한 기본적인 방어체계가 마련됐기 때문이다. 또한 거의 모든 기업이 이젠 웹 서비스를 업무에 활용하기 있기 때문에 이를 새로운 해킹 경로로 이용하는 것도 한 요인이다.

실제로 웹 애플리케이션은 기술적으로도 공격하기에 그리 어렵지 않아 해커들의 주요 표적으로 이용되고 있다. 시만텍의 최신 보고서에 따르면 2004년 하반기에 보고된 전체 취약점 가운데 약 48%가 웹 애플리케이션 취약점으로 집계됐다. 2004년 상반기에 비해 39%나 증가한 것이다. 시만텍은 “최종 사용자의 PC 한 대에만 침입하면 시스템에 손쉽게 접근할 수 있어 전형적인 보안 시스템을 피할 수 있고, 개별 서버를 공격하지 않고도 기밀을 빼낼 수 있어 심각한 보안문제”라고 분석했다.

특징적인 것은 이런 공격의 주요 타겟은 주요 기업들의 웹 사이트지만, 공격의 중간 경유지로는 대학의 전산실이 널리 이용된다는 점이다. 학생들이 사설로 운영하고 있는 서버나 관리되지 않는 전산실의 PC들은 이미 외국 해커들이 주로 찾는 놀이터가 된지 오래다. 이들 서버와 PC들은 최신 기종인 경우가 많아 외국 해커들이 특히 선호하고 있으며 DDoS 공격이나 스팸메일 발송의 수단으로 악용되고 심지어 대학의 학사행정 네트워크로 침입하는 게이트웨이 역할을 하기도 한다. 보안관제 전문업체 코코넛 전익수 부장은 “6만 명의 개인정보가 유출된 미국 캘리포니아 주립대학의 사례가 남의 일이 아니다”라며 “학사행정 네트워크와 일반 네트워크를 반드시 분리해 구축해야 한다”고 지적했다.

현재 국내에는 와우해커와 널루트, 두 개의 대표적인 언더그라운드 해킹 그룹과 30여 개 대학 해킹 동호회가 활동하고 있다. 언더그라운드 해킹 그룹은 주로 정기적인 온라인 모임을 통해 현재 널리 사용되고 있는 시스템과 애플리케이션의 보안 취약점을 연구하고 의견을 교환하고 있는 것으로 알려져 있다. 코코넛의 이성열 컨설턴트는 “외부에 노출돼 있는 해킹 모임은 건전한 것으로 판단하고 있다”며 “점조직처럼 개인적인 친분으로 동호회를 운영하는 경우도 있다”고 말했다. 전세계적으로 금전적인 이해를 노린 해킹이 급증하고 있고 실제로 국내에서도 개인정보를 빼내 거래하려다 적발되거나 대규모 스팸을 발송한 해커들이 뉴스에 보도되고 있지만 전문 해커들이 범죄를 위해 조직적으로 움직이는 징후는 없다고 말했다.

해커의 선순환 구조
국내에서 해킹 동호회의 움직임이 가장 활발했던 시기는 1999~ 2000년 즈음이다. 정부가 나서서 대학의 해커 동아리를 지원하면서 1999년 해커스랩을 시작으로 와우해커와 널루트 등 언더그라운드 해커 그룹이 잇달아 결성됐다. 전국의 대학 해커 동호회 만도 90여 개에 달했다. 그러나 이러한 해킹 지원책이 성과없는 퍼주기라는 비판이 제기되면서 2001년 이후 지원이 중단됐고 일부 해커그룹 회원들의 개인정보 유출 사건과 1·25 인터넷 대란을 겪으면서 해킹에 대한 대중의 인식이 급속도로 냉각되기 시작했다.

그러나 최근 들어 해킹에 대해 재조명 움직임이 활발해지고 있다. 정보보호진흥원(KISA)의 해킹대응팀 성재모 팀장은 “중국과 미국 간의 외교분쟁이 사이버 전쟁으로 비화된 이후 국내에서도 방어 개념의 사이버 보안의 일환으로 해킹 기술에 대한 관심이 커지고 있다”며 “현재 구체적인 지원 방안을 준비하고 있다”고 있다고 말했다.

이러한 새로운 해킹 지원책은 ‘방어를 위해서는 공격 방법을 알아야 한다’는 반성에서 출발했다. 아직 구체적인 안이 나오지는 않았으나 국내의 경우 해킹에 대한 인식이 필요 이상으로 부정적이어서 사실상 해킹 인력이 재생산되는 구조를 만들지 못하고 있다. 성 팀장은 “대학에서 해킹 관련 지식을 익힌 전문 인력이 보안업계로 진출해 역량을 발휘하는 ‘해커의 선순환’ 구조를 만들어야 한다”고 말했다.

그러나 선순환의 한 축을 담당하는 보안업계에서는 이것이 정부의 생각일 뿐이라고 일축했다. 90년대 후반 이후 일부 유명 해커들이 모의 해킹 전문 인력으로 보안업계에 진출했으나 상당수가 조직생활에 적응하는데 실패했다. 코코넛의 전 부장은 “유명한 해커라고 해서 실제로 함께 일을 해 보니 기초가 부실하거나 출퇴근 시간조차 제대로 지키지 못했다”며 “보안 컨설팅이란 업무 특성상 관리가 되지 않는다는 점은 치명적인 결함”이라고 말했다. 그는 “해킹과 방어적인 차원의 보안은 근본적으로 서로 보완할 수 없는 개념”이라며 “해킹 전문가가 부족한 것이 사실이지만 해커 출신을 채용할 계획은 없다”라고 덧붙였다.

이와 같은 업계의 반응에는 보안 서비스를 받고 있는 기업들이 해커에 대해 어떤 반감을 갖고 있는지를 단적으로 드러낸다. 이들은 해커란 자사의 웹 사이트를 공격해 서비스에 이상을 발생시키거나 기밀 정보를 빼내는 존재이므로 서비스를 의뢰한 보안업체와 해커의 협력은 ‘적과의 동침’과 다를 바 없다는 입장이다.

실제로 보안업계에서 해커와의 협력이나 해킹은 일종의 금기시된 용어 가운데 하나다. 보안전문업체 맥아피의 경우 몇 년전 대만 지사에서 해킹 대회를 주최하려고 준비한 적이 있었다. 당시 시장에 출시된 다양한 IDS의 성능을 해킹 대회를 통해 직접적으로 비교, 테스트 해 보자는 취지였다. 당시 대만지사 담당자는 매우 의욕적으로 추진했으나 시만텍을 비롯해 관련 업계의 반대에 부딪혀 무산되고 말았고 담당자는 인사상의 큰 불이익을 감수해야 했다. 맥아피 코리아의 이혜영 부장은 “해커와 보안업체의 관계는 마치 부부사이와 같다”고 말했다. 부부 중 한쪽이 큰일을 당해 다른 쪽이 거액의 보험금을 받을 경우 제1용의자로 지목될 수 있다는 것이다. 실제로 지난 1·25 인터넷 대란 당시 국내에서도 몇몇 보안업체가 수혜자로 회자되곤 했다.

이러한 인식의 차이는 해킹의 개념에 대한 논란으로 이어진다. 특히 학계와 보안업계의 시각차가 가장 큰데 해커의 양성화를 주장하는 학계에서는 해킹의 범위를 전통적인 불법 크래킹으로 보고 이를 방어적인 관점에서 활용할 수 있는 방안을 찾아야 한다는 입장이다. 반면 업계에서는 해킹을 위한 준비과정인 스캔은 물론 정상적인 접속 이외에 인터넷 서비스를 방해하거나 피해를 주는 모든 행위를 광범위하게 해킹을 봐야 한다고 주장한다. 코코넛의 전 부장은 “해킹의 순기능을 논하는 것은 해커들 사이 혹은 학교에서의 논의에서나 가능한 일”이라며 “기업이나 관공서처럼 신뢰성을 생명으로 하는 웹 사이트의 경우 악의적인 의도가 없는 스크립트 키디의 행위에 의해서도 피해를 입을 수 있다”고 말했다.

선투자 개념으로 본 해킹
그러나 해킹대응팀의 성 팀장은 일부 이런 우려를 이해하지만 해커 지원 방안을 지속적으로 추진할 것이라고 말했다. 그는 “얼마전 미국과 중국간의 외교 분쟁이 웹 전쟁으로 비화된 것처럼 최근 독도사태와 관련해 우리나라와 일본 사이에 비슷한 일이 일어날 경우 이를 방어할 민간 조직이 있느냐”며 “방어 차원의 해킹 기술에 초점을 맞춘 해커 양성을 위해 지원 정책을 마련할 것”이라고 밝혔다. 언더 해킹 그룹의 한 멤버에 따르면 현재 국내에서 시스템 해킹을 할 수 있는 이른 바 고급 해커는 100명 이하인 것으로 알려져 있다.

방어 개념의 해킹은 이미 언더 해커 그룹들의 대표적인 활동으로 자리잡고 있다. 널엣루트 출신으로 현재 보안 컨설턴트로 일하고 있는 김경곤 씨는 “언더 해커 그룹들은 보통 시스템과 애플리케이션의 취약점을 먼저 발견해 벤더들에게 제공하고 그 해결방안을 함께 찾는 형태의 프로젝트를 진행하고 있다”고 말했다. 최근 제로보드와 테크노트의 취약점을 분석해 패치를 권고한 것도 모두 널앳루트의 활동성과다. 김 씨는 현재 널앳루트 내부에서는 기존 운영체제와 애플리케이션은 물론 모바일과 무선랜, 홈 네트워크 등 새로운 플랫폼에 대한 연구도 진행 중이라고 말했다. 이런 성과 가운데 일부는 책이나 잡지 기고를 통해 공개되고 있다.

언더그룹의 한 해커는 최근 사회적 문제가 되고 있는 사이버 머니 혹은 개인정보를 겨냥한 해킹의 경우 해커 사회에서 매우 혐오스러운 범죄로 여겨지고 있으며 내부적인 온/오프 모임에서도 이런 이야기를 꺼내는 경우는 없다고 말했다. 그는 “해커 내부에서는 누가 어떤 일을 했는지 다 알게 된다”며 “실제로 불법 크래킹 사실이 알려져 매장당한 케이스도 있다”고 말했다. 현재 컨설턴트로 일하고 있는 김경곤 씨도 “문제가 되는 일부 해커들은 항상 존재했었다”며 “이를 전체 해킹에 대한 선입관으로 제단해서는 안된다”고 말했다.

일부에서는 크래킹 사고 건수가 아니라 선투자 측면에서 해킹에 접근해야 한다는 주장도 있다. 최근 가장 심각한 위협으로 급성장하고 있는 피싱이 바로 그것이다. 정상적인 웹 서버를 해킹해 위장 사이트를 개설한 후 인터넷 이용자들의 금융정보를 빼내는 수법으로, ‘당신의 신용정보를 재입력하라’는 메시지와 함께 인터넷 뱅킹 아이디와 패스워드 등을 입력하는 웹 페이지를 보여준다. 물론 입력한 정보는 고스란히 악의적인 해커의 손에 들어간다.

해외의 경우 피싱의 피해가 심각하다. 시만텍에 따르면 2004년 12월 기준 피싱 메일은 주당 평균 3300만 건이 발송되는 것으로 집계됐다. 7월의 평균 900만 건에 비하면 반년 만에 4배 가까이 늘어난 것이다. 국내에서도 2월 한달간 총 64건이 발견돼 지난해 같은 기간에 비해 12배나 늘어났다. 그러나 속을 들여다 보면 ebay(23건), Paypal(13건), SouthTrust Bank(5건) 등 국내 금융권에 대한 피싱 시도는 거의 없다. 왜 그럴까?


비밀은 해외의 인터넷 뱅킹 방식과 국내 방식의 차이에 있다. 해외의 경우 아이디와 패스워드만으로 인터넷 뱅킹을 할 수 있지만 국내는 이 외에도 공인인증서와 시크릿 카드가 필수적이다. 해킹대응팀의 성 팀장은 “머리에 있는 패스워드와 직접 소지하고 있는 시크릿 카드, 그리고 인터넷을 통한 공인인증서가 모두 필요하기 때문에 해킹을 한다는 것이 기술적으로도 어렵고 시간도 많이 걸린다”고 말했다.

외국의 경우 현재 뱅킹 시스템에 우리나라와 같은 보안장치를 추가하려면 안정성과 테스트 기간을 고려해 최소 국내보다 3~4배 가량의 비용이 소요될 것으로 예상된다. 보안과 해킹을 대응하기 위한 선투자가 엄청난 사회적 비용을 절감해 준 셈이다.

해킹의 재발견, 창조적 해킹
해커들은 스스로를 보안 인프라에 도움을 주는 사람이라고 칭한다. 시스템과 제품의 취약점을 분석하며 지적 호기심을 충족시키며 외국 해커와 경쟁하는 사람이라는 의미다. 그러나 보안업계에서는 보안과 해킹은 다르다며, 조직생활에 적응하지 못했던 1세대 해커들에 대한 경험을 근거로 내세운다. 정부는 안보와 방어적 보안 관점에서 해커의 선순환이라는 논리로 해킹 기술 양성화에 대해 이야기하지만 아직까지는 실제 언더 해커 그룹과 대화에 나서고 있진 않다. 서로 다른 입장의 3자는 어떻게 차이를 극복할 수 있을까. 다음은 이에 대한 단적인 사례가 될 것이다.

마이크로소프트 웹 사이트의 보안 게시판을 보면 윈도우 운영체제에서 아파치와 같은 웹 서버 역할을 IIS 관련 패치 웹 페이지에서 한국 도메인을 하나 발견할 수 있다(<화면 1>).

당시 한 보안 컨설팅 업체에서 일하던 사람으로 사용자에서 권한을 상승시킬 수 있는 취약점(MS02-062)을 발견, 제보해 마이크로소프트 본사에서 패치를 했고 이에 대해 감사의 뜻을 표시한 것이다. LiOn으로 알려진 이 해킹 전문가는 현재까지도 보안업계 쪽에서 활발하게 활동하고 있다.

이 사례는 정부와 업계 그리고 해커 그룹 3자의 시각 차이를 좁히는 일이 어디에서 시작돼야 할지를 잘 보여준다. 해커와 해킹 기술을 올바르게 활용할 수 있는 현실적인 대안을 찾기 위해서는 기존 해커들의 활동과 해킹 기술의 활용 방안에 대해 보다 냉철한 평가가 필수적이다. 해커에 대한 기업과 보안업계의 우려가 높아지는 가운데 해킹에 시선이 쏠리고 있는 지금이야 말로, 역설적으로 이런 논의를 시작하기에 가장 적기일지도 모른다. [maso]
"Software" 카테고리의 다른 글
  • Windows Server 2008 (0)2008/04/27
  • 오류없는 SW 개발을 꿈꾼다 (0)2005/10/12
  • 해커를 움직이는 힘 (0)2005/05/30
  • 메인스트림으로 도약하는 리눅스 커널 2.6 -1 (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
2005/05/30 01:11 2005/05/30 01:11
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1131

Leave your greetings.

[로그인][오픈아이디란?]

Software2005/05/30 00:53

메인스트림으로 도약하는 리눅스 커널 2.6 -1

초기에는 다른 운영체제에 비해 훨씬 미약한 존재였던 리눅스가 수많은 시행착오와 개선을 거친 후 일종의 메인스트림 운영체제로 자리잡고 있다. 이는 인터넷 초창기 대학에 있는 사람들과 초기의 리눅스 해커들을 중심으로 많은 리눅스 관련 개발자들의 열정에 의해 가능했다. 리눅스의 사회적인 광범위한 보급도 2.0대 초반 버전이 발표되던 시기의 ‘폭발적인 인터넷 보급으로 인한 서버의 필요성’과 맞물렸다. 이 원고에서는 자동차의 신형 엔진에 비교할 수 있는 리눅스 커널 2.6에 대해 설명하려고 한다. 리눅스 커널 2.6에 이르러 많은 변화가 있었지만 그 중 몇 가지의 중요한 변화에 대해서 적어보려 한다.

안윤호 | mindengine@hanmir.com
필자는 아마추어 커널 해커이다. 최근에는 관심의 폭이 조금 넓어져서 인문과학과 생물학에도 관심이 많아졌다. 이전에는 의학과 의공학을 공부한 적이 있다.

리눅스는 이제 발표 13년차에 들어간다. 1991년 말에 만들어진 리눅스는 초기에는 다른 운영체제에 비해 훨씬 미약한 존재였다. 성능이 우수하지도 않으며 보호 모드에서 간신히 돌아가는 유닉스 클론에 가까웠다. 하지만 개발자들은 리눅스에 열광했다. 그들에게는 자신들만의 유닉스를 PC에서 돌릴 수 있다는 사실만으로도 대단한 일이었다. 이때부터 리눅스 개발자 커뮤니티가 형성되기 시작했다. 이 커뮤니티에 의한 개발 방식은 그 전까지는 유례가 없던 일로, 그 의미와 가치에 대해선 에릭 레이먼드의 「성당과 시장」이라는 글에 잘 요약되어 있다.
리눅스는 초기에 M. Bach가 쓴 책 『The Design of the Unix Operating System』의 구현을 충실하게 따르다가 수많은 시행착오와 개선을 거친 후 일종의 메인스트림 운영체제로 들어섰다. 초기의 리눅스는 기본적으로 AT&T의 ‘System V의 초기 버전 유닉스 커널(System V Release 2, 이하 SRV2)’을 충실하게 따랐다. SVR2 커널은 1980년대 초반에 만들어진 것으로 System V Release 4 이후의 커널과는 많이 다르다. SVR4는 썬 마이크로시스템즈의 구현을 일부 반영하기도 했으며, 많은 부분이 새로 씌어진 보다 본격적인 커널이었다. 아마 SVR4에서 출발했으면 지금과는 다른 모습일 것이라는 게 필자의 추측이다. 이런 해묵은 코드들은 초기의 리눅스 코드들과 비슷하다(관심이 있는 독자들은 http://minnie.tuhs.org/UnixTree/에서 역사적인 코드들을 볼 수 있다). 물론 시간이 지나자 코드들은 점점 더 복잡하게 되었으며 이런 코드들뿐만 아니라 코드를 만드는 gcc나 다른 유틸리티들도 함께 복잡해졌다. 리눅스의 초기 코드들은 지금은 소스포지로 옮겨간 Linux Cross refer ence 프로젝트(http://lxr.linux.no/)에서 볼 수 있다(필자는 본지 2002년 1월호 ‘운영체제 오디세이’에서 유닉스 계열의 역사를 나름대로 정리한 바 있다).

인터넷과 리눅스의 발전
일단 리눅스의 커널이 만들어지자 수많은 GNU 소프트웨어들의 구현이 그 안에서 이뤄졌다(비슷한 시기에 GNU의 애플리케이션이 BSD나 다른 운영체제에서도 구현되었다). 리눅스의 개발이 초창기의 ‘인터넷’을 중심으로 대학에 있는 사람들과 초기의 리눅스 해커들을 중심으로 이루어졌듯이 리눅스의 보급도 버전 1이나 2.0대 초반 버전이 발표되던 시기의 ‘폭발적인 인터넷 보급으로 인한 서버의 필요성’과 맞물렸다. 이 보급이 너무나 빨랐고 초기의 옹호자들이 열성적이었기 때문에 업계가 관심을 가지기 전에 이미 수많은 리눅스 박스들이 서버 하우스 내에서 돌아가고 있었다. 리눅스 업계의 초기 IPO 과정에 인텔을 비롯한 대형 IT 업체들이 관여한 것은 어플라이언스 서버로서의 리눅스의 전략적 가능성을 반영한 결정이었다. 로버트 영이 쓴 『리눅스 혁명과 레드햇』이라는 책은 이러한 상황을 잘 정리했다. 업계들의 리눅스에 대한 관심은 마이크로소프트를 싫어한다기보다는 그 영향권에서 끌려다니기 싫어하는 메이커들의 속사정에도 기인했다.
이와 함께 순수하게 리눅스 자체를 즐기는 개발자들도 늘어났다. 사람들이 여러 가지 이유로 리눅스에 많은 기대를 쏟아붓다보니 리눅스는 하나의 대안이라기보다는 대안의 상징물처럼 보이게 되었다. 업체들은 아무리 많은 돈을 들이더라도 이렇게 완숙한 운영체제를 턱하니 만들 수 없다는 사실을 잘 알고 있었기 때문에 여러 가지 좋은 이유를 대며 리눅스를 옹호하고 지원했다. 메인스트림 운영체제로서의 리눅스는 주장 당시의 초기에는 성능상 논란의 여지가 있었지만 많은 발전이 이루어진 현재는 그렇지도 않다.
얼마 후 리눅스에 대한 이해가 높아지고 플랫폼 이식이 쉬워지자 ARM이나 MIPS, PPC 등을 중심으로 임베디드 리눅스에 대한 관심이 아울러 커졌다. 이것은 리눅스가 발표되고 몇 년이 지나자 자연스럽게 예측되었던 일로 임베디드 리눅스의 수요 역시 꾸준히 증가했다. Lineo의 IPO 이후 많은 임베디드 리눅스 회사가 탄생했다. 국내에서도 마찬가지로 임베디드 리눅스를 표방하는 몇 개의 회사들이 탄생했다.
짧은 기간 동안 많은 변화를 거쳐 리눅스는 커널 버전 2.6대에 이르렀다. 아직은 많은 사용자들이 2.4대의 커널에 머물러 있지만 곧 2.6 커널을 사용할 것이다. 2.4에서도 그렇지만 2.6 커널은 많은 변화를 동반했다. 고성능 서버와 임베디드를 동시에 표방하며 각자가 이루고 싶은 것들을 투영하는 작은 마술상자 같은 리눅스가 버전 2.6에 이른 것이다.

리눅스 2.6 커널에 대해서
리눅스에 관한 책은 아니지만 유닉스의 일종인 솔라리스의 커널 구조를 다룬 『Solaris Internals』의 표지에는 유명한 스포츠카 메이커인 로터스의 엔진 구조도가 나온다(www.solarisinternals.com). 저자들이 커널 책의 제목에 엔진을 표제로 쓴 것은 어쩌면 의미심장하다. 저자들은 커널 아키텍트라기보다는 커널의 튜닝 쪽에 가까운 사람들이다. 커널과 엔진은 유사성이 있어 보인다.
자동차의 엔진이라는 것은 그 자체가 최고의 엔지니어링이면서 엔진의 발전과 변화에 대한 계보가 있고 하나의 엔진 블럭과 헤드가 만들어지면 십여 년간 그대로 사용될 수밖에 없다. 일단 완성된 엔진은 특별한 개선 없이 하나의 존재 그 자체로서 차종의 수명이 다할 때까지 부분적인 최적화를 계속하면서 기술적으로 발전한다. 많은 최신 기술들을 외부에서 들여오기는 하지만 자신의 것으로 만들려면 피나는 노력이 필요하다. 하지만 자동차라는 것은 엔진만으로 만들어지는 것이 아니며 수많은 부품들의 합이다. 조향성이라든가 사용자 인터페이스, 그리고 엔진의 성능과 기타 모든 엔지니어링의 합이다.
유닉스 운영체제도 커널이 매우 중요한 엔진이지만 다른 것들의 도움이 없으면 결코 완성품이 되지 않는다. 또한 엔진들도 점차 복잡해져서 과거의 단순하고 우아했던 엔진 구조의 아름다움은 어디에도 없다. 그럼에도 불구하고 모든 엔진은 같은 목적을 가지고 있으며 구조도 비슷하다. 하지만 여기서 한 가지 확실한 사실이 있다면 엔진을 새로 만들거나 튜닝(개선)하려는 사람이 있다면 엔진의 기본에 대한 흔들리지 않는 지식이 있어야 하고, 실제로 수도 없이 뜯어보고 다른 엔진들과도 비교해 보아야 한다는 것이다. 커널을 엔진에 비유하기는 했지만 완벽한 비유는 아니다.
필자는 어쩌면 일종의 신형 엔진에 비교할 수 있는 리눅스 커널 2.6에 대해 설명하려고 한다. 리눅스 커널 2.6에 이르러 많은 변화가 있었지만 그 중 몇 가지의 중요한 변화에 대해서 간단히 적어보려 한다. 크고작은 변화들이 있겠지만 크게는 쓰레드와 스케쥴러에서 가장 많이 바뀌었다. 문제는 두 주제만 하더라도 단순한 내용이 아니어서 이러저러한 내용이라고 뭉뚱그리고, 관련 서적과 URL로 관심을 돌리는 정도로 끝나고 말 것 같다는 점이다. 쉽게 쓰려고 애를 쓰긴 하겠지만 필자는 독자들이 리눅스 커널 구조에 대해 약간의 관심이 있다고 가정할 수밖에 없음을 양해해 주기 바란다.
"Software" 카테고리의 다른 글
  • 오류없는 SW 개발을 꿈꾼다 (0)2005/10/12
  • 해커를 움직이는 힘 (0)2005/05/30
  • 메인스트림으로 도약하는 리눅스 커널 2.6 -1 (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
2005/05/30 00:53 2005/05/30 00:53
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1127

Leave your greetings.

[로그인][오픈아이디란?]

Software2005/05/30 00:38

64비트 시스템에서 바라 본 운영체제 패러다임의 변화-3

IA-64로 본 64비트 패러다임
IA-64는 매우 다양한 메모리 구성을 지원하고 있기 때문에 설명이 어렵기도 하다. 많이 인용되는 인텔의 자료 중 「Unveiling the IA-64 Architecture for System Software」라는 글은 매우 깔끔하게 IA-64의 구조를 요약하고 있다(http://www.intel.com/design/itanium/ archSysSoftware/). 이 글에서 아이테니엄의 가상 메모리 공간에 관한 내용은 다음과 같이 나누어 정리하고 있다.

◆ 프로세스 주소공간(Process Address Space)
◆ 시스템 주소공간(System Address Space Management)
◆ 가상주소변환(l Virtual Address Translation TLB and Page table)
◆ 유연한 객체공유모델(Flexible Object Sharing Model)

IA-64의 프로세스 주소공간은 각각 64비트 공간으로 설정할 수 있다. <그림 1>이 가장 기본적인 주소공간이다. 프로세스 주소공간은 각 프로세스 별로 독립적이다. 다른 말로 하면 개별적인 프로세스마다 64비트 공간을 모두 사용할 수 있다는 것인데 이 공간에 text , heap , bss 그리고 stack이 할당된다. IA-64 리눅스는 이 공간을 8개로 나누어 사용하고 있다.


<그림 1> IA-64의 프로세스 주소 공간

시스템 주소공간은 커널과 내부 설비가 사용하는 메모리이다. 이 공간 역시 내부적으로 64비트 공간을 설정할 수 있는데 이 공간은 이른바 영역(region : 유닉스의 영역구조와 비슷하지만 이것은 프로세서 내부에 있는 구조이다)을 이용하여 이 공간을 수많은 영역으로 나눌 수 있다(<그림 2>). 각 프로세스 별로 다른 영역들을 자신에게 맞게 맵핑할 수 있고 이들을 공유할 수도 있다. 운영체제가 잘 설계되고 영역이 여러 프로세스나 쓰레드에서 잘 공유될 수 있다면 매우 효율적인 자원공유라는 목표를 달성할 수 있을 것이다.


<그림 2> IA-64의 시스템 메모리와 영역 구조

IA-64의 영역구조가 새로운 것처럼 보이지만 이들은 새로운 것이 아니다. IBM의 RS/6000(나중에 파워PC에 영향을 미친다)과 비슷한 시기에 발표되었던 HP의 PA-RISC의 고전적인 가상 메모리 구성방법이 IA-64에도 다시 적용된 것이다. 이 부분은 Precision Architecture의 가상 메모리에 관한 문헌들에 나오는 부분들이다.
PA-RISC과 IA-64는 많은 유사성이 있는데 PA-RISC에서는 메모리 관리부분이 조금 특이했다. 메모리 관리에는 2가지 또는 3가지의 접근 방법이 있었다. MMU가 가상공간을 실제 주소로 구현할 때 IA-32에서는 페이지 테이블이라는 방법을 사용했고 다른 CISC들도 이런 방법을 사용했다(<그림 3>). 이 방법은 구현이 쉽기 때문에 많은 운영체제에서 사용했다. 단점이라면 가상공간이 넓은 경우 사용하지 않는 부분에 대해서도 페이지 테이블을 유지해야 되므로 페이지 테이블의 오버헤드가 너무 커지는 단점이 있다. 페이지 테이블은 간단히 말하면 가상공간의 페이지 테이블을 만들고 실제의 메모리와 대응시키는 방법이다.


<그림 3> 이지 테이블 방식의 가상 메모리 관리로 가장 많이 쓰이는 방법이다. 64비트에서는 3레벨 또는 그 이상의 페이지 테이블을 사용한다.

반대의 패러다임은 역 페이지 테이블을 이용하는 방법으로 RS-6000과 파워PC에서 사용한 것이다, 가상공간이 아니라 실제 존재하는 메모리의 페이지 테이블을 만들고 이것을 가상 메모리에 대응시키는 것이다. 역 페이지 테이블은 직관적이긴 하나 문제가 없는 것도 아니다. 예를 들면 새로운 페이지 테이블을 할당하거나 변환 실패가 증가할 때의 갱신 오버헤드가 증가하는 것 같은 문제가 있다.


<그림 4> 역 페이지 테이블 방식의 MMU 구조이다. 이 방식은 거대한 페이지 테이블을 유지하지 않고 물리적 메모리(RAM)의 페이지 테이블만을 사용한다.

다른 패러다임으로는 MIPS R3000처럼 TLB(translation lookaside buffer)를 이용하여 IA-32에서처럼 수많은 페이지 테이블을 관리하는 번거로움에서 벗어날 수 있도록 하는 방법으로 단점이 없는 것도 아니다. 그러나 관리해야 하는 주소 공간이 커지고 페이지 테이블을 따로 관리해야 하는 오버헤드가 커지면 좋은 방법이 될 수도 있다,
필자가 설명한 부분은 Uresh Vahalia의 「Unix Internals」 13장에 장단점이 자세히 나오며 B. Jacob의 글에서는 실제의 MMU 구조를 비교하며 자세히 설명되는 부분이다. IA-64에서는 PA-RISC에서의 방법과 기존의 페이지 테이블을 이용한 관리방법도 같이 있는데 이들을 조합하고 구현하는 것은 운영체제 설계자의 몫이다.
TLB와 MMU 그리고 페이지 테이블 방식의 상호 관계에 대한 해묵은 논쟁은 32비트가 등장한 80년대부터 논란의 여지가 많은 주제였으나 IA-64는 이들을 모두 포함한다. 64비트이긴 하지만 별반 새로운 것은 아니다. IA-64의 두 가지 방식의 혼재가 혼란스럽기는 하지만 운영체제의 포팅이 좀더 용이하다는 점도 간과할 수 없다. 과거에는 페이지 테이블을 이용한 MMU 관리가 대세를 이루었으나 주소공간이 커지면서 역 페이지 테이블을 이용한 MMU 관리도 점차 증가할 것이다.
아직까지는 문서화된 자료들에서는 기존의 운영체제의 큰 틀에서 벗어나지 않고 있다. 책으로 출판된 IA-64 리눅스 커널 같은 자료에서도 기존의 메모리 관리 방침의 큰 골격을 그대로 이용하고 있고 솔라리스의 64비트 버전도 마찬가지다(IA-64의 리눅스 커널의 홈페이지는 http://www.linuxia64.org/). 프로세서에서 아무리 큰 발전이 있더라도 운영체제의 대대적인 구조변경으로까지 반영되려면 많은 노력이 필요하며 기존의 골격을 결코 쉽게 포기하지는 않는다. 마이크로 커널이라고 해도 64비트로의 이행은 만만한 일이 아니다. 참고로 맥 OS X은 마이크로 커널 구조인데 64비트가 되었어도 과거의 커널 구조는 그대로 유지하고 있다. 마크(Mach)의 VM 구조를 최적화한 형태이긴 하지만 그대로 유지하고 있는 것이다. 64비트 프로세서에 최적화된 운영체제의 새로운 지도를 작성하려면 시간이 더 필요한 것이다.


<그림 5> 맥 OS X의 구조

놀라운 성능의 프로세서를 사용하는 64비트 머신이라도 실제로는 향상된 능력의 전부를 사용하는 것도 아니고 그렇게 대단한 일이 아니다. 성능보다는 기능성에서 또한 앞으로의 발전 가능성에 대한 기대를 갖는 편이 더 나을 것이다.

데이터를 처리하는 방식이 변한다
여러 개의 검증된 64비트 프로세서와 비교적 새로 등장한 IA-64 그리고 AMD의 해머같이 확장된 프로세서는 앞으로 시장의 점유를 놓고 경쟁할 것이고 새로운 64비트 운영체제와 애플리케이션이 등장할 것이다. 이번 글에서는 운영체제에서 가장 큰 변화를 겪을 것으로 예상되는 가상 메모리 부분에 대해 피상적으로 설명했다. 파일 시스템이나 통신 같은 부분은 64비트라고 해도 크게 바뀌지 않을 것이다. 그런데 가상 메모리는 다르다.
지금까지는 기대할 수 없던 거대한 데이터를 메모리에 맵핑하고 관리할 수 있게 되면 애플리케이션이나 미들웨어에서 버퍼와 캐시를 할당하기 위해 기울였던 노력은 운영체제로 넘어가게 된다. 하나의 거대한 파일을 커다란 메모리 공간으로 맵핑하고 이 공간의 관리는 운영체제가 맡는다. 운영체제는 새로운 MMU의 능력을 이용해서 최소한도의 오버헤드로 커다란 주소공간을 관리한다, 데이터베이스나 멀티미디어 애플리케이션들은 중대한 변화를 맞이하게 될 것이 분명하다. 프로세서의 주소공간에서 본다면 테라바이트도 작은 사이즈에 속할 날이 얼마 남지 않은 것 같다. 이미 윈도우의 IA-64 버전도 16TB의 주소공간을 기본적으로 지원한다.
물론 VM은 MMU 만으로 이뤄지지 않는다. 거대한 파일을 저장하기 위해 지금보다 더 개량된 파일 시스템이라든가 더 가벼운 IPC 그리고 VM을 효율적으로 구현하기 위한 쓰레드 관리 같은 것이 계속 추가될 것이다. 이번 글에는 지면상 아예 포함하지 않았으나 캐시 갱신의 완전성 관리(특히 SMP의 경우) 같은 더 복잡한 내용이 더 남아있다. 단순히 VM의 관리만을 놓고도 진보를 이루어야 할 복잡한 내용들이 너무나 많다.
프로세서는 32비트 시절의 많은 유산들을 청산하고 64비트가 되었으나 운영체제는 32비트의 골격을 유지하면서 64비트로 서서히 넘어가고 있다. 그러나 64비트 운영체제는 초기단계라고 해도 32비트에서는 시도하지 못했던 거대한 주소공간을 갖게 되었다. 64비트 운영체제가 조금 더 흔해지게 되면 데이터를 다루는 패러다임 자체에 변화가 올 것이고 사람들이 어떤 대상을 생각하는 방법이 바뀌기 시작하면 그때는 큰 변화가 올 것이다.

정리 | 강경수 | elegy@korea.cnet.com
"Software" 카테고리의 다른 글
  • 해커를 움직이는 힘 (0)2005/05/30
  • 메인스트림으로 도약하는 리눅스 커널 2.6 -1 (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
2005/05/30 00:38 2005/05/30 00:38
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1121

Leave your greetings.

[로그인][오픈아이디란?]

Software2005/05/30 00:37

64비트 시스템에서 바라 본 운영체제 패러다임의 변화-2

32비트의 흔적과 64비트로의 진화8비트나 16비트에서 출발하여 32비트를 거쳐 64비트로 서서히 진화가 일어난 프로세서도 있고 알파와 같이 64비트에서 바로 출발한 프로세서도 있다. 그러나 64비트의 프로세서들은 과거의 칩들보다는 매우 복잡하며 다양한 특징을 갖게 되었다. 필자는 독자들이 「Great Microprocessors of the Past and Present (V 13.3.0)」를 한번 읽기를 권한다. 실제로 이 사이트는 여러 문헌에서도 참고자료로 언급하고 있으며 매우 좋은 내용을 담고 있다(http://www3.sk.sympatico. ca/jbayko/cpu.html). 이 글을 읽으면 64비트가 성능이 좋은 것은 사실이지만 특별한 것이 아니라는 사실을 알게 될 것이고 대부분의 아키텍처는 32비트로부터 진화한 것이고 64비트에 대한 신비감이 줄어든다면 좀 더 상식적으로 접근할 수 있을 것이다.

메모리 관리 부분의 변화
개인적인 생각이지만 64비트에 이르러 가장 큰 변화가 올 부분은 메모리 관리에 관한 부분일 것이다. 32비트 운영체제에 대해 64비트 운영체제가 갖는 가장 중요한 이점이라면 우선 메모리 대역폭과 메모리 공간의 증가 그리고 64비트 연산을 수행할 수 있다는 점일 것이다. 클럭의 속도나 수치 연산 프로세서의 성능이 32비트와는 비교가 되지 않지만 64비트 프로세서를 도입함으로서 바로 얻을 수 있는 최대의 효과는 64비트라는 데이터 폭이다. 데이터의 폭(width)이 64비트인 관계로 단순히 생각해도 32비트의 데이터 버스보다 같은 클럭에서 2배의 전송이 가능하다. 메모리의 데이터 대역폭은 CPU보다 메모리가 언제나 느리게 속도 증가가 일어난 관계로 프로세서의 성능증가에 있어 최대의 병목 지점이었다. 일반적으로 메모리와 CPU의 데이터 대역폭의 속도 불일치는 항상 몇 배 이상이었다. 간단히 말해서 CPU는 메모리가 데이터를 읽거나 쓰기를 마칠 때까지 어떠한 형태이건 대기 상태에 있어야 했다(메모리와 프로세서와의 관계에 대한 좋은 글들이 많지만 글을 쓰는 현재 필자의 머리 속에 떠오르는 것은 글은 Bruce Jacob의 「A case for studying DRAM issues at the system level」이다. B. Jacob의 글 중에는 읽을만한 내용이 많다. http:// www.ece.umd.edu/~blj/).
CPU에서 같은 데이터 전송속도가 하더라도 데이터의 전송대역폭(전송량)은 64비트에서는 2배가 되고 이것은 무시할 수 없는 수치이다. 종종 이러한 비교에는 4차선과 8차선 도로의 차량 통행량을 비교하곤 했다. 이것은 가장 간단한 비교이고 다른 요소가 더 있다. 예측 분기와 파이프라이닝을 넘어 메모리 접근의 최적화를 과감하게 시도했다. 대부분의 64비트 프로세서는 메모리 접근의 순서가 반드시 명령의 순서와는 일치하지 않지만 그 의존성은 보존된다는 것인데 프로세서의 메모리 접근마저도 내부에서 최적화되어 스케쥴되는 것이다.

가상 메모리 공간의 확장
그 다음으로는 가장 중요한 요소라고 할 수 있는 가상 메모리에 대한 부분이다. 마이크로 커널의 경우 가장 핵심적인 요소는 두 가지이다. 바로 메모리 자원의 관리와 스케쥴러이다. 자원의 관리는 내부적인 IPC(InterProcess Communication)에서 이 두 요소에 의해 이루어지는 것이다. 아무튼 이 두 가지만 있으면 마이크로 커널은 수행 가능하다. 다른 시스템 자원관리자들은 이 코어에 파일 시스템이나 통신 기타 IO 등을 덧붙이면서 만들어진다. 일반적인 모노리틱 커널마저도 이 두 가지 요소는 필수적이고 자원의 할당과 스케쥴링이 없으면 아무 일도 되지 않는다. 스케쥴링은 64비트라고 하여 쓰레드 연관을 제외하고는 특별한 이슈가 아니지만 너무 방대하여 이 글의 범위를 넘는 사항이다.
메모리 공간에서 가장 중요한 사실은 가상 메모리 공간의 구조이다. 우리가 알고 있는 일반적인 메모리 모델은 가상 메모리 상에서의 구조이다. 64비트에서 메모리 공간의 확장은 가상 메모리 공간의 확장을 말한다. 실제로 32비트 운영체제에서는 32비트 공간(2의 32승 그러니까 4GB) 정도의 메모리 공간이면 충분하다고 생각했으나 메모리 값이 떨어지자 4GB의 램을 갖는 기종들이 출현하게 되었다. 이러한 문제를 극복하기 위해 운영체제 내에서 여러 가지 편법이 동원되곤 했다. 어떤 프로세서는 이보다도 훨씬 더 적은 1GB 정도의 메모리 가상공간을 이용했고 초기에는 이것으로 충분했다. 어떤 프로세서들은 32비트 이상의 가상 주소공간을 이용할 수 있었으나 대부분은 32비트의 구조공간이 한계였다. 그러나 데이터베이스나 거대한 메모리 맵핑을 시도하는 애플리케이션인 경우 매우 부족한 공간이 되었기 때문에 확장이 필요했다. 64비트 운영체제에서는 더 많은 공간을 할당했다.
가상 메모리 공간은 실제의 램이 있건 없건 간에 사용자에게 커다란 메모리 공간을 사용하는 환상을 제공하며 Denning 같은 사람들에 의해 이론이 확립된 후 운영체제의 중요한 부분이 되었다. 필자는 가상 메모리에 대해 본지 2002년 8월호의 「운영체제 오디세이」에서 설명한 적이 있다(지금 생각해보면 부족한 부분이 많은 글이었다). 운영체제에서 가상 메모리를 다루는 큰 틀은 크게 두 가지로 나누어 설명할 수 있다. 첫 번째는 MMU(Memory Management Unit)와 관련된 부분이고 다른 하나는 가상 메모리를 백업하는 시스템(‘backing storage’라고도 하며 주로 파일 시스템이다)과의 상관관계로 나눌 수 있다.

MMU와의 관계
가상 메모리 공간은 우선 MMU와 밀접한 관계가 있다. 64비트의 MMU라고 해서 32비트 프로세서와 완전히 다른 것은 아니며 거의 같다고 할 수 있다. 이들은 모두 32비트의 유산을 물려받았다. 아무튼 이상적인 가상 주소공간은 이른바 ‘크고 희박한(large and sparse)’ 것이라고 한다. 전체적으로는 큰 공간을 제공하고 그 안의 메모리를 차지하고 있는 요소들은 가상공간에서 가급적 멀리 떨어져 있어야 한다. 64비트 공간은 4GB 영역의 공간이 4GB 배만큼 더 있는 것이니까 당분간은 부족하지 않을 것 같다.
모든 프로세서는 전부 다른 MMU를 갖고 있고 접근 방법도 다르다. 이 부분에 대해서는 B. Jacob의 「Virtual memory in contem porary microprocessors」라는 정말 좋은 글이 있는데 몇 년 전의 글이지만 관심이 있는 독자들은 읽어보기 바란다. 저자는 몇 종류의 중요한 프로세서의 MMU와 관련된 구조를 비교하고 분석했다(TLB와 관련된 부분은 U.Vahalia의 「Unix Internals」와 관련하여 살펴보면 도움이 될 것이다. 일반적으로 TLB에 관련된 부분은 32비트에서도 상당히 어려운 부분이다). IA-64는 B. Jacob이 글을 쓸 때는 존재하지 않던 아키텍처라서 비교 대상에서 빠진 것이 아쉽다.
"Software" 카테고리의 다른 글
  • 메인스트림으로 도약하는 리눅스 커널 2.6 -1 (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 공개 소프트웨어 라이선스 종류와 그 특징들 (0)2005/05/29
2005/05/30 00:37 2005/05/30 00:37
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1120

Leave your greetings.

[로그인][오픈아이디란?]

Software2005/05/30 00:36

64비트 시스템에서 바라 본 운영체제 패러다임의 변화-1

프로세서는 이미 64비트가 되었으나 운영체제는 32비트의 골격을 유지하면서 64비트로 서서히 넘어가고 있다. 64비트 운영체제가 조금 더 흔해지게 되면 데이터를 다루는 패러다임 자체에 변화가 올 것이고 사람들이 어떤 대상을 생각하는 방법이 바뀌기 시작하면 그때는 큰 변화가 올 것이다. 특정한 운영체제의 개발에 종사한 것도 아니며 10년 이상 사용되어 온 32비트 운영체제에 대해서도 잘 모르는 부분이 많은 필자가 64비트 운영체제에 대한 글을 쓴다는 것이 조금 이상하지만 64비트 운영체제라는 것은 사람들의 기대와는 달리 별로 특별한 것이 없다는 것이 필자의 생각이다.

안윤호 | mindengine@hanmir.com
필자는 아마추어 커널 해커이다. 최근에는 관심의 폭이 조금 넓어져서 인문과학과 생물학에도 관심이 많아졌다. 이전에는 의학과 의공학을 공부한 적이 있다.
---------------------------------------------------------------

64비트 운영체제는 말 그대로 64비트 프로세서를 사용하기 위한 운영체제이다. 사용자들은 자신도 모르는 사이에 알파(alpha)나 울트라스팍(UltraSPARC)을 사용하는 서버에 접속하고 있고 이들이 바로 64비트 운영체제를 사용하고 있다. 이들 운영체제의 동작환경 중 어떤 부분이 32비트 모드이거나 32비트 호환 모드에 있다거나 컴파일러나 다른 중요한 애플리케이션이 32비트 모드에서 수행된다고 할지라도 사용자들은 이미 64비트의 프로세서와 그 힘을 이용하여 운영체제를 운영하고 있다고 봐야 한다. 그러나 독자들이 이 글에서 기대하는 것은 아마 64비트의 새롭고 거대한 능력과 데스크탑에 64비트가 사용되기를 기대하는 것일 터인데 아직은 조금 시기상조라고 말할 수 있다. 물론 최신의 맥이나 스팍을 데스크탑으로 사용한다거나 아니면 AMD의 해머가 있다. 그러나 아직은 64비트 운영체제는 시작 단계라고 봐야 한다.

이미 현존하고 있는 64비트 운영체제
64비트의 프로세서는 이미 여러 종류가 있으며 이들을 사용하는 64비트 운영체제 역시 예전부터 존재했다. 비교적 용이하게 볼 수 있는 썬 마이크로시스템즈의 솔라리스 7 이후 울트라스팍을 사용하는 서버는 64비트 운영체제이지만 솔라리스 운영체제를 설명하는 서적(Solaris Internals, http://www.solarisinter nals.com/)에서도 크게 64비트에 대한 부분을 강조하고 있지는 않다. 이미 이전부터 많은 이행 노력이 있었기 때문일 것이다. 그러나 울트라 스팍에서 프로세서의 아키텍처는 크게 변했고 「UltraSPARC I/II User’s Manual」이나 「UltraSPARC III Cu User’s Manual」같은 썬의 문서들은 프로세서 아키텍처에 대해 설명하고 있다.
IA-32보다 IA-64가 극단적으로 어려운 것과 마찬가지로 이들을 읽는 데는 상당한 인내심과 실력이 필요하다. MIPS의 R1000이나 파워PC 같은 아키텍처들도 이미 64비트로의 이행을 일치감치 끝냈다. 예전의 IA-32나 우아하고 간단했던 MIPS R2000, R3000 같은 아키텍처들처럼 간단하지가 않다. 현대의 전투기와 과거의 복엽기를 비교하는 것과 마찬가지라고 할 수 있다.
이미 많은 컴퓨터 회사들이 64비트를 지속적으로 써오고 있었음에도 불구하고 사람들이 64비트 시대로 접어들었다고 막연하게 실감하게 된 것은 인텔의 아이테니엄이 출시되고 난 후이다. 인텔과 마이크로소프트(이하 MS)가 대중들에게 어필하는 운영체제의 비즈니스 모델을 보이거나 새로운 대중적인 운영체제가 자리 잡게 된다면 그때는 의미 있는 운영체제로서 자리 잡을 것이다. 문제는 현재의 하이엔드 시장은 이미 64비트 CPU와 운영체제가 있으며 소비자들이 얼마나 64비트의 운영체제를 필요로 하는가에 대해서는 아직은 알 수 없다.

예측은 불가능하다
이 글은 64비트의 특별한 성질보다는 16비트를 거쳐 32비트에서 성숙한 운영체제들과의 연관성을 더욱 강조하게 될 것 같다. 또 이미 많은 기사들에서 EPIC이라던가 레지스터의 특이성, 성능 개선에 관련된 부분을 다루었기 때문에 독자들도 많이 알고 있는 내용일 것이다.
필자가 본지에서 연재하고 있는 「IT 인물열전」에서 말했던 것처럼 시장의 예측은 언제나 불가능했다. 이른바 킬러 애플리케이션이라든가 새로운 수요가 나타나면 시장은 급변하는데 소비자들의 반응은 예측할 수 없으며 마케팅보다 더 중요하고 통제할 수 없는 변수이다. 32비트의 대성공 역시 인터넷과 웹의 폭발적인 성장과 멀티미디어 환경이 보편화되면서 가속화된 것이지만, 64비트를 성공적으로 정착시키는 요인이 무엇인지는 아직 잘 모르는 것이다. 일종의 킬러 애플리케이션이 게임이 될지 아니면 다른 멀티미디어 애플리케이션이 될지 예측은 불가능한 것이며, 따라서 회사들의 마케팅이 어떠하건 그 칼자루는 소비자에게 달려 있다.
다만 현재로서는 인텔과 MS가 소비자 시장에서 매우 중요한 공급자라는 것이 중요한 출발점이라고 말할 수밖에 없다. 이들은 몇몇 중요 벤더들과 협력하여 아이테니엄이라는 프로세서를 가지고 시장을 향해 포문을 열었다. 여러 메이커들이 모두 선점하고자 혈안이 되어 있는 64비트 운영체제와 애플리케이션 시장은 일단 미션 크리티컬한 분야와 하이엔드 시장으로 높은 부가가치가 있다. 숙성이나 보급까지 얼마의 시간이 걸릴지는 몰라도 시장은 이제 진입단계로 들어갔다.
다른 기사들을 통해 업체들의 시장 진입에 대한 열망을 엿볼 수 있다. 2003년 4월의 인텔의 보도자료 웹 사이트의 제목은 ‘IA 서버, 新 MS 운영체제로 세계 최고의 성능 기록 - 인텔, HP, MS 3사가 인텔  아이테니엄 2 프로세서 6M 기반 서버로 세계 No.1 TPC-C 벤치마크 결과 기록’으로 되어 있다. 아이테니엄 I에서는 조직적인 마케팅과 개발 협조가 부진했기 때문에 이해관계가 걸려 있는 업체들의 공동노력이 집중된 것이다. 이러한 노력의 목적은 새로운 시장을 창출해내기 위해서이다. 업체들은 시장의 진입시간을 앞당기고 싶은 것이다. 물론 그 이후에도 아이테니엄에 대한 기사와 벤치마크는 계속 보도자료에 나온다. 하지만 아직은 아이테니엄 서버를 도입하는 일이 보도자료에 나올 정도로 흔한 일이 아니다. 어떤 회사가 제온(Xeon) 프로세서를 서버를 도입했다고 뉴스에 나올 일은 아니다. 제온 프로세서는 흔하기 때문이다. 수세나 레드햇 같은 리눅스 업체들도 64비트에 대한 보도 자료를 내고 있다. 그러나 아직은 기술적인 자료가 많은 편은 아니다.
"Software" 카테고리의 다른 글
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 공개 소프트웨어 라이선스 종류와 그 특징들 (0)2005/05/29
  • 자유 소프트웨어의 상업적 이용에 따르는 법적 문제-3 (0)2005/05/29
2005/05/30 00:36 2005/05/30 00:36
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1119

Leave your greetings.

[로그인][오픈아이디란?]

Software2005/05/29 22:48

공개 소프트웨어 라이선스 종류와 그 특징들

GPL 위반의 법적 효력은 어떻게 되는가?이에 대해 참조할 수 있는 중요한 미국 판례로서 MySQL 대 NuSphere 사건(미국 195 F. Supp. 2d 328; 2002 U.S. Dist, 2002년 2월 28일 판결)이 있다. 이 사례는 GPL과 상용 오픈소스 라이센싱의 유효성에 관한 것으로 GNU GPL이 처음으로 법적 문제가 된 의미 있는 사례라 할 수 있다. MySQL은 웹 프로그램에 사용하는 데이터베이스로 급속하게 성장하고 있다. MySQL은 다른 데이터베이스 서버에서는 보기 드문 배열된 옵션과 유용한 특성을 가진 데이터베이스 프로그램을 제공하며 오라클이나 사이베이스, 인포믹스와 같은 관계형 데이터베이스로 유닉스와 리눅스, 윈도우에서 작동하기도 한다. 무엇보다도 MySQL의 가장 큰 장점은 GPL을 따르므로 무료로 제공되는 공개용 데이터베이스라는 것이었다. 한편 MySQL 애플리케이션은 인기를 끈 이후 MySQL 관련 부가 서비스를 제공하면서 영리를 추구할 수 있는 상업적 목적을 가진 회사인 MySQL AB가 설립됐다. 따라서 사용자는 만일 GPL의 조건 하에서 무료 또는 GPL의 조건에 따르지 않기를 원하는 경우 라이선스 비용을 지급하고 상업적인 MySQL 라이선스 버전을 이용할 수 있다. NuSphere는 소프트웨어 개발회사인 프로그레스 소프트웨어(Progress Software Corporation)의 자회사로 주된 제품은 Gemini라고 하는 소프트웨어 도구였다.
양 당사자의 분쟁은 피고 NuSphere 측에서 ‘NuSphere MySQL Advantage’라는 제품을 출시하면서 시작되었다. 이 Gemini는 MySQL 데이터베이스 제품의 코드를 링크한 데이터베이스 제품을 배포했다는 혐의를 받았다. MySQL의 GPL 계약서 제2조의 (b)에는 “당신은 저작물의 전부 또는 일부가 MySQL으로부터 파생된 경우 배포하거나 공표하는 경우 이 라이선스 조건에 따라 모든 제 삼자에게 무상으로 허용해야 한다”라고 되어 있다. 이러한 요건들은 변경된 저작물에 전체적으로 적용된다.
만일 확인 가능한 섹션들이 프로그램에서 나온 것이 아니라면 당연히 독립적이고 분리된 섹션으로 간주될 것이지만, 만일 이것을 전체적인 프로그램의 일부분으로서 배포한다면 그것은 프로그램에 근간한 섹션에 대한 전체적인 배포가 되며, 전체에 대한 배포는 필연적으로 전체적으로 라이선스 계약의 조항을 적용받게 된다. NuSphere 측은 자신들의 제품 Gemini가 GPL의 조항 하에서 또는 ‘독립적이고 분리된 저작물’의 조건하에서만 배포될 수 있는 2차적 저작물이라고 주장했지만 MySQL는 “Gemini는 고정적으로 MySQL에 링크되어있기에 독립적이고 분리된 저작물로 배포한 것으로 보기에 곤란하다”고 말했다. Gemini 프로그램이 GPL 제2조 하에 파생적인 것인지 아니면 독립적이고 분리된 작업이었는지에 관한 것은 중요한 사안이었다.
2000년 6월, MySQL AB와 NuSphere는 잠정적인 합의에 도달했고 NuSphere는 MySQL 측에게 250만 달러를 라이선스의 대가로 총액 31만 2501달러 규모의 비용을 지급하다가 갑자기 다시 거의 1년 반이 지난 후인 2001년 2월, 계약조건에 대한 최종협상이 당사자간에 결렬되었다. NuSphere는 오히려 MySQL을 상대로 소송을 제기하게 된다. MySQL 측은 반소를 제기하며 대응을 했는데 상표권 침해 및 잠정적 계약 위반, 부정경쟁 및 사기적 거래행위 그리고 무엇보다도 GPL 조항 위반을 그 주장으로 삼았다. MySQL AB는 즉각적으로 상표권 위반 및 GPL을 위반에 근거하여 가처분 신청 절차에 착수하였다. 한편 2001년 7월, NuShere는 Gemini라는 제품의 소스 코드를 공표해버렸다. 그것은 NuShere가 MySQL을 이용하여 개발한 Gemini에 대한 상업적 라이선스 및 이윤추구행위를 포기하겠다는 의미였다. 미국 매사추세츠 지방 법원 Patti Saris 판사는 MySQL AB의 가처분을 심리하였으나 결국 GPL의 위반을 이유로 한 MySQL의 청구를 부인하였다. 즉 NuShere 측의 Gemini 소스 코드의 배포 행위 자체가 NuShere가 GPL을 위반했다는 사실을 치유하지 못하기는 하지만 GPL에 관련하여 원고 측 MySQL이 회복할 수 없는 피해 등의 가처분 요건을 입증하지는 못했다는 이유였다.
물론 이 사건에서 MySQL의 승소 자체가 명확하게 드러난 것은 아니었지만 몇 가지 시사점을 주고 있다. 무료라는 인식하에 통용되는 GPL이라 할지라도 어떠한 경우는 계약위반으로 소송을 제가당할 수 있다는 점이다. 둘째 GPL에 기반 한 MySQL 등의 제품을 허락 없이 사용하여 그를 바탕으로 새로운 상업용 소프트웨어를 만든 경우 그것이 MySQL과는 ‘독립적이고 개별적인 소프트웨어’라는 것을 입증하지 못하는 한 계약위반 등의 책임을 지게 된다는 것이다. 물론 외국 소프트웨어 회사의 경우 우리나라에 소송을 실제로 제기할 가능성이 있는가 여부는 별개의 문제이다.

컴포넌트 소프트웨어와 2차적 저작물의 법적 문제
컴포넌트는 응용 프로그램이나 또 다른 컴포넌트 소프트웨어를 구성하거나 재사용하기 위하여 개발된 모듈화 및 객체화된 창작성 있는 프로그램의 개별 단위를 의미한다. 일반적으로 부품을 조립해서 제품을 만들어내는 것처럼 부품화된 소프트웨어들을 조립하여 완성된 소프트웨어를 만들어 낼 수 있다. 이러한 독립된 단위 기능의 소프트웨어 부품 컴포넌트의 법적 성질과 관련하여 컴퓨터 프로그램 보호법상의 프로그램 저작물에 해당하는가를 살펴보자.
컴포넌트가 사상·감정을 말, 문자, 음, 색 등에 의하여 구체적으로 외부에 표현된 창작적 표현형식이고, 창작성 역시 “완전한 의미의 독창성을 말하는 것이 아니며, 단지 어떠한 작품이 남의 것을 단순히 모방한 것이 아니고 작자 자신의 독자적인 사상 또는 감정의 표현을 담고 있음을 의미할 뿐이어서 이러한 요건을 충족하기 위해서는 단지 저작물에 그 저작자 나름대로의 정신적 노력의 소산으로서의 특성이 부여되어 있고, 다른 저작자의 기존의 작품과 구별할 수 있을 정도면 충분(대법원 1995. 11. 14. 선고 94도 2238 판결)”하므로 저작물로서 성립한다고 볼 수 있다. 즉 컴포넌트는 컴퓨터 프로그램 보호법에 의해 보호되는 프로그램 저작물이라 할 것이다. 따라서 컴포넌트의 법적 보호방법 중 컴퓨터 프로그램 보호법에 의한 접근의 경우는 특별한 경우가 아니라면 저작권법 또는 컴퓨터 프로그램 보호법상의 저작권 일반 법리에 의하여 처리하면 될 것이다. 따라서 컴포넌트 소프트웨어 자체를 개발하는 경우의 프로그램 저작권 문제는 일반 소프트웨어의 경우와 마찬가지로 저작권이 부여된다.
다만 컴포넌트 소프트웨어를 조립하여 완성된 소프트웨어와의 관계에 있어 당해 소프트웨어가 ‘공동저작물’ 또는 ‘결합저작물’인가에 대한 판단은 각각의 개별사안마다 구체적이고 종합적으로 판단하면 될 것이다. 그러나 컴포넌트의 특징이 분리이용 가능성의 효율화라고 한다면 이 경우 상당 부분은 결합저작물에 해당하기 쉬울 것이다.

◆ 프로그래머 A는 텍스트 편집기를 코드화하고 그것을 GPL하에서 라이선스 한다.
◆ 프로그래머 B는 A로부터 소스 코드를 이용하여, 텍스트 편집기에 몇몇 기능을 추가한다. 즉, B는 2차적 저작물을 창작한다.
◆ 프로그래머 C는 동적으로 자신의 코드를 B의 프로그램에 링크한다.

이 경우 만일 컴포넌트의 조립에 있어 그 ‘선택과 배열’에 창작성이 존재한다면 편집저작물로서 새로운 저작물로 인정될 수 있을 것이다. 만일 조립 과정 중에 컴포넌트에 대한 어떠한 개변이 가해졌다면 2차적 저작물로서 인정될 것이다. 2차적 저작물이란 원저작물을 번역, 편곡, 변형, 각색, 편집, 영상제작 및 그 밖의 방법으로 작성한 저작물을 말하며 독립적인 저작물로서 보호된다. 이 때, 2차적 저작물의 보호는 그 원저작물의 저작자의 권리에 영향을 미치지 않는데, 이 말은 2차적 저작물을 이용하려는 사람은 원저작자 및 2차적 저작자 쌍방의 동의를 얻어야 함을 의미한다. 오픈소스 정의에 의하면 OSI의 승인을 얻기 위해서는 오픈소스 라이선스는 개작 및 2차적 저작물을 허용해야 하고, 그것들이 최초 이러한 소프트웨어의 라이선스와 동일한 조건으로 배포되는 것을 허용해야 한다.
아마도 다양한 오픈소스 라이선스 간에 가장 중요한 차이점은 2차적 저작물에 대한 접근방법이다. 이 문제는 중요한 법적 영향을 가져올 수 있다. 특히, 오픈소스에 기초하여 사업을 영위하고자 하는 자는 2차적 저작물 창작에 관련된 법적 문제를 고려해야 한다.
컴포넌트를 바탕으로 2차적 저작물내지 편집저작물, 공동저작물을 이루는 경우 그 컴포넌트가 공개 소프트웨어 라이선스를 따르는 소프트웨어인 경우는 어떻게 될 것인가? 이 점은 앞서 살핀 GPL, LGPL, BSD 라이선스, MPL이 규정하고 있는바 그대로이다. 즉 공개 소프트웨어가 컴포넌트로서 2차적 저작물의 일부분이 되는 것은 인정하지만 그 후 2차적 저작물의 상업적 재배포에 대한 태도에서 약간씩 라이선스마다 다른 입장을 취하고 있다. 그러나 BSD 라이선스를 제외하고는 나머지 라이선스를 따르는 경우는 소프트웨어의 수정 이후 소스 코드를 공개하고 판매해야만 한다. BSD는 무엇보다 2차적 저작물에 대한 카피레프트 조항이 없다. 즉, 배포하거나 공표하려는 저작물의 전부 또는 일부가 양도받은 프로그램으로부터 파생된 것이라면, 저작물 전체에 대한 사용 권리를 공중에게 무상으로 허용해야 한다는 GPL을 따르지 않아도 된다. 따라서 상업용 소프트웨어 판매자들도 BSD 라이선스로 배포되는 공개 소프트웨어의 컴포넌트를 자신의 제품에 무제한으로 사용할 수 있다.
공개 소프트웨어를 컴포넌트로 삼아 다른 새로운 소프트웨어를 만든 경우에 그것을 상업적으로 판매하려면 소스 코드를 공개해야만 하기 때문에 결국 개발자는 상업적 성공을 추구하는 데에는 곤란을 겪게 될 것이다. GPL 정책은 누구나 자유롭게 소프트웨어를 개작하거나 이를 통해 2차적 저작물을 작성할 수 있다고 하지만 이를 다른 사람에게 배포하기 위해서는 개작된 소프트웨어에 대한 배포본이나 출판물 전체에 대한 사용권리를 일반인에게 무상으로 허용할 것을 규정하고 있기 때문이다. 이른바 이중(dual) 라이선스를 현실적인 대안이라고 생각하는 이유가 여기에 있다.
문제가 되는 것은 이러한 GPL 정책을 지키지 않은 2차적 저작물이 있는 경우이다. 즉 GPL 정책을 취하고 있는 소프트웨어를 활용하여 2차 저작물을 작성한 자는 이를 GPL 정책을 취하지 않은 채 공급하여 사실상 독점적 소프트웨어로 만들어 버릴 수 있다. 이것은 2차 저작물 작성자의 2차 저작물 작성행위는 원 저작권자의 저작권 침해행위가 될 것이다. 이 경우 원저작물의 저작권자는 해당 2차 저작물의 배포의 금지 등을 청구할 수 있다. 그러나 이런 경우에도 그는 엄연히 2차 저작물의 저작권자이기 때문에 그 2차 저작물에 대해서는 2차 저작물 작성자인 자신이 정한 라이선스 정책이 유효하게 된다.

리눅스 저작권 분쟁에 대한 단상
유닉스와 리눅스의 관계를 모르는 사람은 없으리라 생각한다. 유닉스는 69년부터 벨연구소에서 흥미로운 프로젝트로 시작되었고, 70년대 애용되기 시작하면서 대단한 인기를 끌었다. 전세계 대학교와 연구소, 기업에서 일하는 수많은 개발자들이 이 프로젝트에 코드를 추가시키면서 오픈소스 형태의 개발 방식이 그때 이미 나타나기 시작했다고 볼수있다. 그러고보면 리차드 스톨만의 말처럼 자유 소프트웨어는 최근에 갓 태어난 네트워크는 아니다. 1984년에 벨 시스템이 분할되면서 AT&T가 컴퓨터 사업에 진출할 수 있게 되자, AT&T는 유닉스 코드를 폐쇄해 버렸다. 유닉스는 피폐해졌고, 초기 유닉스 해커들이 가져다준 상상력과 생명력을 더 이상 경험할 수 없게 된 유닉스는 서서히 쇠퇴하기 시작했다. AT&T는 자기네 코드를 유닉스 시스템 연구소로 넘겨버렸고, 그 다음에는 노벨이라는 회사로 넘겨지더니, 1995년에는 드디어 칼데라로 넘어가게 된다. 칼데라는 2001년에 SCO라는 이름과 그 회사의 권리들을 인수한다.
90년대 들어와 여기저기서 성공을 구가하던 리눅스 공동체는 정말 그 예전의 유닉스 코드 베이스같은 것은 필요로 하지도 않았고 원하지도 않았다. 한편 2003년까지 칼데라는 8년 동안 리눅스를 판매하면서 손해를 거듭했다. 칼데라가 SCO라는 이름과 함께 사들였던 옛날 유닉스 코드에 관심을 보이는 사람은 거의 없었다. 그러나 2002년 후반에 SCO는 재정난이 심각해져서 제품을 만드는 인력의 상당수를 정리해고 했고, 다수의 고정 자산을 매각했으며, 돈이 될만한 회사를 상대로 소송할 준비를 마쳤다. 이 회사가 바로 IBM이었다.
2003년 3월 SCO는 결국 IBM이 유닉스에서 리눅스로 기술을 이전하는 과정에서 영업비밀을 남용했기 때문에 자사와의 계약을 위반했다며 10억 달러 이상에 달하는 손해배상소송을 제기했다. SCO가 주장하는 바는 다음과 같다.

“IBM은 AIX의 소스 코드를 리눅스 개발자들이 이용할 수 있게 만들었다. 리눅스 개발자들은 그 소스 코드를 그대로 복사해서 리눅스에 넣었거나 그 코드가 AIX로부터 나온 것이라는 사실을 숨기기 위해 몇몇 군데를 바꾸어 놓은 다음 리눅스에 집어넣었다.”

재정적인 어려움을 겪고 있는 SCO 그룹의 이러한 주장의 궁극적인 목표는 리눅스 소프트웨어 사용자들에 대한 라이선스 수수료를 한 푼이라도 받아내고자 한다는 점이다. 이처럼 오픈소스 운영체계인 리눅스를 둘러싼 저작권 분쟁이 가열되고 있는데 에릭 레이몬드는 리눅서들이 분개할만한 3류 코미디라고 흥분하고 있다. 그러나 어찌 보면 언젠가 왔어야 할 문제가 온 것이라고 할 수 있다. 유닉스의 대안으로서 시작한 매우 유사한 인터페이스와 기능을 가진 리눅스의 확장은 필연적으로 유닉스가 가졌던 시장을 크게 위협하고 있으며 유닉스 저작권 보유자는 지금이야말로 일전을 불사해야 한다고 판단한 것으로 보인다. 어쨌든 최대 리눅스 업체 레드햇은 SCO 그룹을 상대로 반소를 제기하면서 오픈소스 소프트웨어가 SCO에서 주장하고 있는 저작권 및 영업비밀을 침해하지 않았다고 다시 주장했지만 레드햇 CEO 매튜 스줄릭이 언급한바 처럼 SCO의 소송은 오픈소스에 대한 중대한 위협일 수 있다.
SCO의 저작권 주장으로 리눅스 고객에 해당하는 조심스러운 기업들이 소프트웨어 구매를 연기 혹은 철회하고 있기 때문이다. 이러한 위협이 일시적일지 아니면 리눅스가 가진 매력을 충분히 상쇄하고 남을 위협인지는 좀더 두고 봐야 판단할 수 있을 듯하다. 물론 미국에서의 일이지만 리눅스를 둘러싼 유닉스 저작권 소송은 여러 해 진행될지도 모른다. 스트래티고 CEO인 피터 스카진스키는 다음과 같은 말을 한 적이 있다

“리눅스는 제품이라기보다 하나의 운동(movement)으로 이해해야 한다. 오픈소스의 상징이자 리누스 토발즈의 발명품인 리눅스의 기본 개념은 ‘프로세스는 소유권이 인정되는 재산이 아니다”

생각해보자. 법정책적 관점에서 저작권으로 보호하려는 이유는 유닉스라는 소프트웨어의 창작성을 배타적으로 보호해주어 그 보상을 일정기간 받게 해주는 것이었다. 그러나 실제로 유닉스를 보고 만지작거리고 새로운 것을 첨가해서 사용하고 하는 사람들은 너무 빨리 나아갔다. 저작권법의 규정대로라면 사람들은 그것을 무려 70년동안 혼자서만 사용했어야만 하고 내용을 개선시켜서 네트워크에 널리 퍼뜨려서는 안되었다. 바꿔 말하면 사람들은 유닉스란 소프트웨어를 맞닥뜨려 사용하더라도 불편해도 그것을 그냥 사용했어야만 했다. 그러나 사람들은 유닉스를 조금씩 고쳐서 사용하면 훨씬 효율적인 것이라는 것을 알았고 빠르게 새로운 내용을 서로에게 알려주었다. 결국 SCO의 얘기라면 수천명이 동시에 기초적인 소프트웨어를 수준급의 매력적인 툴로 바꾸어놓기는 했지만 그 이전의 유닉스 프로젝트의 원래 흔적이 묻어있으므로 이른바 리눅스에 기여한 수천명은 허락 없이 동시에 저작권침해를 했다는 것이 된다. 그러나 리눅스는 이미 그 자체로서의 의미를 가진 채로 널리 사용되고 있다. 경제학적으로는 리눅스를 소멸시키지 않는 것이 현재 훨씬 유용하다.
유닉스 저작권 분쟁은 P2P를 통한 MP3 파일의 유통이 문제되어 소송이 제기 되었던 넵스터의 경우와 매우 흡사하다. 즉, 알려지지 않은 미지의 영역에 대해 법원은 다시금 시금석이 되는 판단을 내려야만 한다. 적어도 넵스터 사건에서는 넵스터라는 소프트웨어와 그 운영자를 상대로 하였지만 MP3 파일을 내려받은 수많은 사용자들을 상대로 소송을 제기하지는 않았다.
그러나 현재의 유닉스 저작권 소송에서는 1500 여개가 넘는 리눅스 사용기업을 상대로 하고 있을 뿐 아니라 리눅스 업체들을 동시에 겨냥하고 있다. 미국에서 들려오는 SCO의 소식을 듣노라면 왜 하필 소프트웨어를 저작권법으로 보호하고 왜 그리 오랜 기간 보호하느냐 하는 의문을 가지게 된다. SCO는 저작권을 준수해야한다는 당위명제를 등에 업었더라도 사실 대단한 무리수를 두는 것이다.
확실한 것은 SCO 소송이 해결되는 방식에 따라 컴퓨팅 산업이 오픈소스 소프트웨어와 그 기반을 대하는 태도가 크게 영향을 받을 것이 분명하다는 점이고 그 결과에 따라 우리나라의 리눅스 업계 또한 큰 영향을 받을 것이다. 미국의 경우 일반적으로 소송이 실제로 법원에서 판결이 날 때까지 진행되는 비율은 불과 5%정도뿐이다.
아마도 이 경우도 화해판결을 통한 적절한 타협점을 찾음으로서 소송이 종결될 가능성이 크다. 그 이유는 사실상 저작권에 의한 소프트웨어의 보호는 신규성을 요하지 않고 창작성만 있으면 저작권이 발생함으로 말미암아 저작권 침해 여부의 판단이 매우 어렵고, 만일 유닉스와 리눅스에 대한 엄밀한 감정이 법원의 주도하에 이루어지는 경우 유닉스 저작권자도 자신이 가진 논리의 빈약성을 노출시키게 될지도 모르는 위험성을 부담하기 때문이다.

리눅스 상표권 분쟁에 대한 단상
‘Linux’ 또는 ‘리눅스’라는 표장을 제호의 전부 또는 일부로서 사용한 프로그램 관련 전문서적 22종과 CD-ROM 6종이 이미 발행 제작되어 널리 판매되고 있던 지난 95년의 어느 날 ‘Linux’라는 단어에 대한 상표권을 어느 개인이 대한민국 특허청에 상표등록출원을 하게 된 사건이 있었다. 즉 ‘Linux’를 국내의 단지 어느 개인이 당해 9월 25일 제39류(전기·전자제품류)와 제52류(서적류)에 상표등록출원을 했고, 97년 7월 각각 상표등록을 받게되었다. 참고로 설명하자면 상표권은 등록을 받아야지만 효력이 인정되며 이 경우 지정상품을 정하게 되어있다. 이 등록권자는 ‘리눅스’와 ‘Linux’를 서적과 녹화 테이프, 녹화된 CD, 학습지 등 10종에 대해 특허청으로부터 상표권 등록을 받고 그동안 판매된 리눅스 관련 서적의 판매 중지를 요구하는 등 본격적으로 권리를 행사하기 시작했다. 전국의 대형서점과 출판사를 상대로 ‘상표권 침해 중지요청’이라는 제목의 문서를 발송하면서 서적의 제호에 대하여 ‘리눅스’ 및 ‘Linux’가 소비자에게 상표로 인식될 정도의 크기로 사용할 경우 상표권의 침해에 해당한다고 주장했다.
상황이 이렇게 되자 리눅스는 누구나 자유롭게 사용할 수 있는 공개 컴퓨터 운용체계인데도 개인이 상표권을 갖고 업계에 사용 중지를 요구하는 것은 부당하다고 주장하는 항의가 계속되었다. 즉 리눅스는 국내외에서 이미 오랫동안 사용되고 있어 상표로서 식별력을 상실한 보통명칭으로 이를 상표등록한 것은 잘못이라는 것이었다.
상표 등록자와 리눅스 업계, 관련 서적 출판사 사이에 벌어진 있는 상표권 분쟁이 양측의 「상표권 등록취소 심판」과 「상표사용 가처분 신청」으로 이어지면서 사건이 갈수록 확대되었다. 특허청은 리눅서들의 항의가 거세지자 문제가 되고 있는 ‘Linux’ 상표가 등록된 것은 동 상표가 심사된 시점인 96년도 하반기에는 ‘Linux’가 컴퓨터 운영체제의 명칭이라는 것을 심사관이 알 수 없었고 출원공고 기간 중에도 1달간 아무런 이의신청 제기가 없었으므로 등록된 것이라는 궁색한 얘기를 늘어놓기도 했다.
결국 이 사건은 특허법원과 대법원을 거치면서 상당기간 사람들의 관심과 흥미를 끌게 되었다. 우선 대법원은 2002년의 판결을 통해 등록상표 ‘Linux’가 그 지정상품 중 ‘컴퓨터 프로그램이 수록된 테이프, 컴퓨터 프로그램이 수록된 디스크, 컴퓨터 프로그램이 수록된 디스켓’에 사용된 경우에는 상표가 등록무효라서 권리를 가지지 아니한다고 했다. 그 후 특허법원은 2003년 판결을 통해 ‘Linux’ 상표를 컴퓨터 프로그램과 관련된 서적에 독점적으로 사용하지 못하도록 판결했다. 그 이유는 ‘Linux’는 컴퓨터 프로그램과 관련된 서적에 독점적으로 사용하게 되면 일반 수요자들은 이 사건 등록상표가 리눅스의 개발자 또는 그 프로그램을 개선, 발전시킨 리눅서들로부터 상품의 보증을 받았거나 그들과 특별한 관계에 있는 자의 상품으로 오인, 혼동을 일으킬 우려가 있으므로 상품의 품질을 오인하게 하거나 일반인들을 기만할 우려가 있기 때문이라고 하였다.
그러나 이런 소송의 와중에서도 등록자는 아이러니하게도 계속 자신의 권리를 약간씩 확보하게 되었다. 즉 등록상표 ‘Linux’를 지정상품 중 ‘모니터, 전자도난방지기, 전자회로학습기, CDP, TV 게임셋트’에 사용된 경우에는 ‘Linux’를 배타적으로 사용할 수 있게 되었다. 또한 상표등록자의 지정상품 중 녹화된 테이프, 녹화된 CD, 서적, 팜플렛, 학습지에 관하여는 상표권이 여전히 등록자에게 있다고 법원에 의해 인정받게 된다. 그 이유는 그 지정상품 중 이와 같은 것에 관하여는 리눅스라는 등록상표가 앞에 언급한 상품들의 용도, 효능 등을 표시한다거나 일반 수요자로 하여금 상품의 품질을 오인하게 할 염려가 있다고 할 수 없어 그 등록이 무효로 될 수 없다고 본 것이다. 따라서 결국은 리눅스라는 상표의 등록자는 이 상품들에 대하여 리눅스라는 상표를 계속 배타적으로 사용할 수 있게 되었다.
95년 상표출원 당시 리눅스가 특허청의 상표심사관들에게 잘 알려지지 않아 생기게 된 이 해프닝은 무려 8년 만에 종결이 되었지만 공개 소프트웨어와 관련한 소송사건으로서 리눅서들에게 다소 당황하스럽게 받아들여지고 있다. 크게는 공유 소프트웨어라는 취지에 대해 대다수가 공감하지만 몇몇은 자신의 인센티브를 철저히 추구하며 기존의 다소 허술한 지적재산권 카테고리에서 자신의 이해관계를 관철시키고자 한다는 점을 볼 수 있다. 그 경우 자신의 인센티브를 보장해주기 위한 볼모가 되는 것은 다름 아닌 공유 소프트웨어 이용자들일 것이다.
사실 상표권 자체는 엄밀한 의미에서 지적재산의 대상은 아니었다. 대량생산 방식의 산업구조 하에서 생산자와 소비자 사이의 직접적 관계가 단절되므로 상품에 대한 특징을 식별력 있게 소비자에게 인식시키는 수단을 찾게 되었고 그것이 상표제도였다. 따라서 상표의 보호는 이른바 지적 창조물에 대한 보호가 아니라 단지 영업의 안정을 도모하기 위하여 모방행위를 금지시키고자 하는 취지에서 만들어진 것에 불과하다. 대다수의 공개 소프트웨어의 비난을 감내하더라도 먼저 선점하는 자가 권리를 가진다는 방식의 마인드는 지적재산권 제도의 원래 취지와는 상반되는 시도에 불과하다.

지적재산권의 균형적 접근과 오픈소스
지금까지 자유 소프트웨어를 상업적으로 사용할 때 직면하게 되는 현실적인 법적 문제를 약간 다루어 보았다. 더 많은 논점과 문제점들이 산재하지만 소프트웨어 지적재산권법적 문제에 대한 간략한 소개와 라이선스의 소개, 소프트웨어에 자유 소프트웨어를 컴포넌트 형식으로 이용하는 경우 2차적 저작물의 처리문제에 대해 다룰 수 있었다. 오픈소스 소프트웨어 문제는 라이선스에 대한 정확한 이해, 정책적 입장, 경제학적 분석, 기업의 움직임 등을 모두 살펴야 비로소 구체적인 윤곽이 드러나는 것으로 느껴진다.
오픈소스 소프트웨어의 미래, 그 중에서도 법적인 미래는 어떠할까 ? 최근 미국의 디지털 밀레니엄 저작권법(DMCA)에 의하여 저작권자가 그 이용자들에게 접근통제(access control) 등의 금지까지 부과할 수 있게 된데 대한 비판이 무성하다. 이는 공공영역에 남겨져서 공정이용(fair use)으로 일반 대중에게 향유되었어야 할 지적 자산들이 사적인 소유로 취급되어 배타적 개인의 영역으로 들어가 버렸음을 의미한다. 마찬가지로 소프트웨어의 영역에서도 지적재산권 제도의 균형적 접근이 사라지게 되는 현실에 우리는 직면해 있다고 생각한다.
그것은 첫째 저작권 보유자가 소스 코드를 공개하지 않아도 된다는 점, 둘째 상업화를 위한 순환기간 보다 터무니없이 길게 소프트웨어의 보호기간이 존재함으로써 필연적으로 네트워크 효과를 초래된다는 것, 셋째 라이선스를 통하여 실제적으로 저작권자가 소프트웨어에 대한 통제권을 필요이상으로 확보하고 있기 때문이다. 하물며 그러한 압도적 통제권을 외국계 소프트웨어 회사가 가지고 있다면 한 국가의 소프트웨어 산업이 발전하지 못하는 이유가 된다.
이러한 시장실패 상황에도 불구하고 독점적 저작권자 보유자인 소프트웨어 벤더들이 ‘이것은 단지 법적으로 인정되는 사적 소유권일 뿐’이라고 주장하는 것은 설득력을 얻지 못할 것이다. 이미 여러 경제학적 분석 결과물들이 소프트웨어 시장의 비효율 내지 시장실패를 명확히 보여주고 있기 때문에 필연적으로 정부가 오픈소스에 대해 장기적이고 확실한 정책적 개입이 필요하다. 이는 이상주의적 상황으로 가기 위한 억지 주장이라기보다는 대안 있는 미래를 찾아가는 유일한 길이라고 생각한다.
회전이 빠른 어떠한 산업영역에 기술 독점을 보장하면 이 독점권은 기술의 혁신을 저해할 뿐 아니라 후발 개발자들에게는 다름 아니라 기술 혁신에 참가할 기회의 박탈을 의미한다. 따라서 법정책적으로 지적재산권의 균형을 찾아가는 입법적 고려가 필요하고 정부의 역할로는 적극적인 공개 소프트웨어 지원정책이 필요한 것이다. 독점의 해악이 상존하는 소프트웨어 시장에서 구조적으로 왜곡되어 있는 패러다임을 이제는 오픈소스를 통한 새로운 패러다임으로 새로이 구축해가는 것이 필요하다.

정리 | 강경수 | elegy@korea.cnet.com
"Software" 카테고리의 다른 글
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 64비트 시스템에서 바라 본 운영체제 패러다임의... (0)2005/05/30
  • 공개 소프트웨어 라이선스 종류와 그 특징들 (0)2005/05/29
  • 자유 소프트웨어의 상업적 이용에 따르는 법적 문제-3 (0)2005/05/29
  • 자유 소프트웨어의 상업적 이용에 따르는 법적 문제-2 (0)2005/05/29
2005/05/29 22:48 2005/05/29 22:48
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1101

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 2 3 4 5 ... 12  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 세면도구
  • 데이터 웨어 하우스
  • libpcap
  • 스냅샷 격리
  • 데이터베이스
  • 크래킹
  • 클립보드
  • 리눅스 커널
  • Logo
  • 웹 로그
  • 마주앙 소비농
  • 프로필
  • Tray
  • 퍼즐
  • 락
  • 마주앙 스페셜
  • 프로세서 정보
  • ASCII
  • 마주앙 샤도네이
  • 메타 블로그

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08
  • 재밌네요~ 첫번째꺼는 요즘....
    Hybrid 2009

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.