<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marashid</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marashid"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Marashid"/>
	<updated>2026-06-16T05:39:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41694</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6j ss</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41694"/>
		<updated>2010-11-18T00:16:17Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Service-Oriented Architecture'''&lt;br /&gt;
&lt;br /&gt;
A few years ago, it was realized that eventually software capabilities are going to be delivered and consumed as services. Implementing them as tightly coupled systems was definitely an option, but, a service-based interface was required between the point of usage to the portal, device or another end-point. Thus, there was the need of a service-oriented architecture that would facilitate the management of delivery, acquisition, consumption etc in terms of services that are related. This hinted at changes in how software life cycle is managed —right from requirements specifications as services, designing these services, acquisition and outsourcing in the form of services, asset management of services, and so on. Thus, after moving from modules to objects, to components, now was the time to move to services.&lt;br /&gt;
&lt;br /&gt;
This wiki chapter aims at providing an introduction to the vast and growing field of '''''Service Oriented Architecture'''''. The chapter also discusses the different '''design patterns'''[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29] currently in practice for the field of Service-Oriented Architecture. The utilization of the concepts of '''coupling'''[http://en.wikipedia.org/wiki/Coupling_%28computer_science%29] and '''cohesion'''[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29] in Service-Oriented Architecture are described. SOA is contrasted with a similar concept called Enterprise Architecture.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Service-oriented architecture (SOA) is a collection or set of services communicating with each other. Two or more services can communicate either via a simple data passing system or could be coordinating on some activity. For these kind of communications to be possible between the services, some means to connect the various services is required. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Service-oriented architectures were existing in the past and are not a new thing. Many people are familiar with the use of '''DCOM''' [http://en.wikipedia.org/wiki/Distributed_Component_Object_Model] or '''Object Request Brokers''' (ORBs) [http://en.wikipedia.org/wiki/Object_request_broker] which are based on the '''CORBA'''[http://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture] specification.These are the first service-oriented architectures deployed for practical applications. The following section gives a brief description about the evolution of SOA: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Evolution of SOA ==&lt;br /&gt;
&lt;br /&gt;
In many respects, SOA is an evolution based on the '''component-based development''' (CBD). It, in fact, is a quantum leap in bringing business and information technology into closer alignment by supporting business processes. The SOA services are made visible to the consumer, but, the underlying components are kept transparent. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Internet and XML standardization efforts demanded a service definition and description published by a service provider (SP) that could be located and invoked by a service consumer (SC). The service description can be implemented by different service providers, each offering various choices of qualities of service (QoS). The invocation can be across Internet or intranet in a distributed object connotation and standards such as '''WSDL'''[http://en.wikipedia.org/wiki/Web_Services_Description_Language] and '''SOAP'''[http://en.wikipedia.org/wiki/SOAP] have been created. &lt;br /&gt;
&lt;br /&gt;
The roles of SC and SP are illustrated in the following figure:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Scsp.jpg|frame|center|Figure 1: Service Provider and Service Consumer in a SOA]]&lt;br /&gt;
&lt;br /&gt;
== Terminologies ==&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&lt;br /&gt;
A '''service''' is a specific function (business function). For instance, analyzing an individual's credit history or processing a purchase order. It can either provide a single discrete function, such as converting one type of currency into another, or it can perform a set of related business functions, such as handling the various operations in an airline reservations system. Services performing a related set of business functions are said to be '''coarse grained'''. Multiple services work in a coordinated way. This aggregated service can be used for a more complex business requirement. &lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
&lt;br /&gt;
'''''Web services''''' is the most likely connection technology of SOAs. Web services essentially use XML to create a robust connection. A web service can be defined as a service that communicates with clients through a set of standard protocols and technologies. These are standardized and are implemented in platforms and products from various vendors, giving clients and services an opportunity to communicate in a consistent way across a wide spectrum of platforms and operating environments. &lt;br /&gt;
&lt;br /&gt;
'' The important concept is service. Web Services are the set of protocols by which Services are discovered, published and put to use in a technology neutral, standard form. ''&lt;br /&gt;
&lt;br /&gt;
=== Service Oriented Architecture ===&lt;br /&gt;
&lt;br /&gt;
Often is the case that one person's needs being met by capabilities offered by someone else. In the world of distributed computing, this scenario can be thought of one computer agent’s requirements being met by a computer agent belonging to a different owner. A one-to-one correlation is not not necessarily needed between these needs and capabilities. &lt;br /&gt;
&lt;br /&gt;
SOA is a ''view'' of architecture focusing on services as the action boundaries between the needs and capabilities in order to service discovery and re-purposing. Thus, Service Oriented Architecture (SOA) can be defined as a paradigm for organizing and utilizing distributed capabilities that may be in different ownership domains and implemented using various technology stacks. &lt;br /&gt;
&lt;br /&gt;
'' SOA is not only an architecture of services (seen from a technology perspective). It includes the policies, practices, and frameworks to ensure the right services are provided and consumed.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
 &lt;br /&gt;
This example depicts how an information system scenario could benefit from a migration to SOA. Consider an organization that has an application using three business processes using the same functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless1.jpg|frame|center|Figure 2: Three business processes within one company duplicating functionality ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The main disadvantages in the above scenario are:&lt;br /&gt;
* The company pays to implement the same functionality multiple times.&lt;br /&gt;
* Maintainence issues : Consider the situation wherein, a manager wants to deny a user access to all three processes.This requires three different procedures (one for each of the applications).&lt;br /&gt;
&lt;br /&gt;
This system can be made efficient if common tasks are shared across all three processes. This requires decoupling the functionality from each process or application and making a standalone authentication and user management application that could be accessed as a service. Thus, the service itself is being repurposed, and, applications and the company owning it can now have a central point for maintaining it. This shows a simple example of Service Oriented Architecture in practice. The following diagram depicts the same:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless2.jpg|frame|center|Figure 3: Three business processes repurposing one service for common tasks ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Discussion =&lt;br /&gt;
&lt;br /&gt;
== Benefits of SOA ==&lt;br /&gt;
&lt;br /&gt;
The following are the primary reasons which encourages an enterprise to take SOA approach:&lt;br /&gt;
&lt;br /&gt;
* '''Reusability''': SOA allows reuse of business services by enabling developers within an enterprise and/or across enterprises to take the code developed for existing business applications, convert them as web services, and then reuse it to meet new business requirements. This results in  huge savings in the cost and time for application development. The more business services get built and get incorporated into different applications, the more are the benefits of reuse.&lt;br /&gt;
&lt;br /&gt;
* '''Interoperability''': One of the main objectives of SOA is to allow clients and services to communicate and understand each other independent of the platform they use. This objective is met when clients and services have a standard and consistent way of communicating with each other. Web services are used for this purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Scalability''': SOA stresses on having few dependencies between the requesting application and the services it uses. Thus, services tend to be coarse-grained, document-oriented, and asynchronous. Coarse-grained services have the advantage of offering a set of related business functions, a document-oriented service accepts a document as input instead of a numeric value or Java object and an asynchronous service doesn't require the client to wait while it performs its processing. This relatively limited interaction from a client for communicating with a coarse-grained, asynchronous service, provides the scope for applications using these services to scale without increasing the communication load on the network. &lt;br /&gt;
&lt;br /&gt;
* '''Flexibility''': SOA discourages sharing semantics, libraries, and often sharing state. This makes it easier for the application to evolve and keep up with changing business requirements. &lt;br /&gt;
&lt;br /&gt;
* '''Cost Efficiency''': As SOA is a standards-based approach, it results in less costly solutions since the integration of clients and services doesn't require the in-depth analysis and unique code of customized solutions. Also, because ervices ins an SOA are  less costly to maintain and easier to extend. Also many enterprises have a lot of the Web-based infrastructure for a web services-based SOA, further limiting the cost. The biggest cost saving of all comes from the reusability feature of SOA. &lt;br /&gt;
&lt;br /&gt;
*'''Agility''': Services can now be delivered quickly and need not depend on the larger projects common in the organization. The business can understand systems and requires simpler user interfaces calling on services. This in turn, speeds up the time-to-market.&lt;br /&gt;
&lt;br /&gt;
* Promotes good design as the service is designed independent of who its consumers are or will be.&lt;br /&gt;
&lt;br /&gt;
* Eases documentation and testing by separating them  from the issues of the implementation. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that SOA doesn't provide the bebefits mentioned below:&lt;br /&gt;
&lt;br /&gt;
* Simple software engineering&lt;br /&gt;
&lt;br /&gt;
* Free integration or interoperability&lt;br /&gt;
&lt;br /&gt;
* Technology independence&lt;br /&gt;
&lt;br /&gt;
* Vendor independence&lt;br /&gt;
&lt;br /&gt;
* The ultimate architecture for the modern enterprise&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Challenges ==&lt;br /&gt;
&lt;br /&gt;
* Maintaining '''metadata''' related to the services is difficult as each service involves various messages used in communicating and an application can involve many such services, generating a huge number of messages. Also, services are delivered by different organizations within the company or different companies and this needs ''SOA Governance''.&lt;br /&gt;
&lt;br /&gt;
* SOA space lacks testing. This indicates that investment is required in a testing framework that would help find the culprit in the architecture. &lt;br /&gt;
&lt;br /&gt;
* As more services get added for extensibility of the system, security models might require changes. Coming up with appropriate levels of security is a concern.&lt;br /&gt;
&lt;br /&gt;
* SOA with Web Services result in addition of XML layers, requiring XML parsing and composition. Applications run slower and require more processing power when used without '''Remote Procedure Calls'''(RPC) [http://en.wikipedia.org/wiki/Remote_procedure_call] and thus, increase costs. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== SOA Principles ==&lt;br /&gt;
&lt;br /&gt;
There is a set of 10 principles for SOA. The first four are based on Don Box's '''four tenets'''. These principles are as listed below:&lt;br /&gt;
&lt;br /&gt;
* '''Explicit boundaries''': ''Services are inextricably tied to messaging in that the only way into and out of a service are through messages''. This means that everything a service would require for its functionality should be passed to it when it is invoked. &lt;br /&gt;
&lt;br /&gt;
* '''Shared Contract and Schema, not Class''': The service consumer and a service provider involved in the contract should have everything they need to consume or provide the service and should not rely upon each other for any kind of reuse. &lt;br /&gt;
&lt;br /&gt;
* '''Policy- Driven''': Since a service can be accessed from various consumers, a policy mechanism is needed. The functional aspects are described in the service interface, and, policies specify the orthogonal, non-functional capabilities and needs.&lt;br /&gt;
&lt;br /&gt;
* '''Autonomous''': It should be possible to change and deploy, version and manage services independent of each other. The consumers need not  quickly adapt to the new version.&lt;br /&gt;
&lt;br /&gt;
* '''Wire Formats''': A service must be accessible independent of the platform, as long as the platform supports the exchange of messages adhering to the service interface and policies.&lt;br /&gt;
&lt;br /&gt;
* '''Document-Oriented''': Documents are used to send data to interact with services. These documents might contain redundant information.&lt;br /&gt;
&lt;br /&gt;
* '''Loosely-Coupled''': As far as possible, components must be loosely coupled which enables extensibility, easier maintainence and a better system. But it is not always possible. &lt;br /&gt;
&lt;br /&gt;
* '''Standard-complaint''': Standards for technical aspects like data formats, metadata, transport and transfer protocols etc, must be followed.&lt;br /&gt;
&lt;br /&gt;
* '''Vendor Independent''': It should be possible to build a service provider or service consumer using any technology supporting the appropriate standards.&lt;br /&gt;
&lt;br /&gt;
* '''Metadata - Driven''': The metadata artifacts in the SOA should be discoverable, retrievable and interpretable at both design and run time.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Design Patterns in SOA =&lt;br /&gt;
&lt;br /&gt;
''Design Patterns'' describe common problems with their solutions that can be applied repeatedly under a set of constraints. The collection of SOA design patterns forms a master pattern language applicable in various combination and sequences. Compound patterns comprising of multiple individual patterns is also possible. SOA has a huge number of design patterns which can be divided into the following categories: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Foundational Inventory Patterns&lt;br /&gt;
* Logical Inventory Layer Patterns&lt;br /&gt;
* Inventory Centralization Patterns&lt;br /&gt;
* Inventory Implementation Patterns&lt;br /&gt;
* Inventory Governance Patterns&lt;br /&gt;
* Foundational Service Patterns&lt;br /&gt;
* Service Implementation Patterns&lt;br /&gt;
* Service Security Patterns&lt;br /&gt;
* Service Contract Design Patterns&lt;br /&gt;
* Legacy Encapsulation Patterns&lt;br /&gt;
* Service Governance Patterns &lt;br /&gt;
* Capability Composition Patterns&lt;br /&gt;
* Service Messaging Patterns&lt;br /&gt;
* Composition Implementation Patterns&lt;br /&gt;
* Service Interaction Security Patterns&lt;br /&gt;
* Transformation Patterns&lt;br /&gt;
* Common Compound Design Patterns &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A more elaborate list and description of these patterns is available at SOA website[http://soapatterns.org/masterlist_c.php]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it can be seen, the SOA design pattern catalog is very broad. These patterns provide design techniques ranging from adjusting minute validation logic in a service contract to design strategies and help structure pools of services across an entire enterprise. An SOA initiative&lt;br /&gt;
requires attention to the various design details associated with every service delivered, while not loosing the big picture. Design patterns help maintaining this balance by helping overcome common obstacles that have historically inhibited or derailed SOA project plans.&lt;br /&gt;
&lt;br /&gt;
== Working with SOA patterns ==&lt;br /&gt;
&lt;br /&gt;
Here are a few guidelines for utilizing the SOA design patterns to their maximum extent:&lt;br /&gt;
&lt;br /&gt;
* Patterns should be viewed with a Strategic Context &lt;br /&gt;
* Governance has to be considered&lt;br /&gt;
* Patterns can be applied to various extents&lt;br /&gt;
* Some patterns can be evolutionary&lt;br /&gt;
* Patterns can relate to other patterns&lt;br /&gt;
* Every pattern is not suitable for everyone&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Coupling in SOA =&lt;br /&gt;
&lt;br /&gt;
'''Coupling''' specifies the degree of dependency between 2 or more modules. As we know, coupling can be classified as '''Loose Coupling''' and ''' Tight Coupling'''. Loose coupling can be defined as ''the state in which the impact of change (change in consumers, providers, or cross-cutting policies) is minimized across dependencies''. Loose coupling is important across units of deployment, whereas tight coupling is sufficient within a unit of deployment.&lt;br /&gt;
&lt;br /&gt;
The essence of SOA is building composite distributed systems efficiently. In order for the distributed components to be reusable, reliable, available, scalable and fault tolerant, an appropriate level of loose coupling is needed. The impact of any change or modification and failures should be minimum on the landscape of a system as a whole. Loose coupling provides this property by defining and describing interaction patterns between components and technologies involved. Loose coupling also brings the advantage of '''versionability''' in SOA. If A and B depend on each other, loose coupling is needed only when A may version independently from B.  That is, if A and B are versioned together, loose coupling between them is unnecessary. &lt;br /&gt;
&lt;br /&gt;
Services in SOA require described interfaces. This provides a measure of loose coupling as the service dependency isn't a software to software dependency; rather it is N software to interface  dependencies. This shows the importance of individual interface contracts. If an interface contract allows anything, then it has tight coupling between components. &lt;br /&gt;
&lt;br /&gt;
There is no one way to build useful distributed systems that are completely decoupled, rather a variety of choices have to be considered based on various aspects of the systems. A property of a system can become a trade-off compared to other properties. For example, an asynchronous service usually requires the client open up its address space for a &amp;quot;callback&amp;quot; which increases the coupling. Also, loosely couple Web Services wait for messages via queuing mechanism before taking action. A large number of such services would be required to exceed the system load. So, tight coupling them can be considered. New mechanisms to switch loosely coupled Web Services to tightly coupled Web Services to avoid system overloads of scarce resources are being considered.&lt;br /&gt;
&lt;br /&gt;
In summary, Loose coupling manifests itself in the SOA paradigm as follows:&lt;br /&gt;
&lt;br /&gt;
* Creates an abstraction layer between the service producers and service consumers.&lt;br /&gt;
* Promotes flexibility in making changes to the service implementation without impacting the service consumers.&lt;br /&gt;
* In the SOA approach, functionality is organized as a set of modular, reusable shared services that have well-defined interfaces and encapsulate the key rules for accessing the services. They're also built without making any assumptions of who will use or consume these services.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cohesion in SOA =&lt;br /&gt;
'''Cohesion''' is defined as the measure of the relationship between the functionality expressed aby a module and the module itself. It is contrasted with the concept of '''coupling'''. High cohesion correlates to loose coupling.&lt;br /&gt;
&lt;br /&gt;
Cohesion can be classified into various types. Below mentioned are the three &amp;quot;good&amp;quot; types of cohesion identified over the years:&lt;br /&gt;
&lt;br /&gt;
* '''Functional Cohesion''': An individual module does only one thing, resulting in low coupling and reusability.&lt;br /&gt;
* '''Sequential Cohesion''': A module carries out several ordered tasks.&lt;br /&gt;
* '''Communication Cohesion''': A module carries out multiple operations based on the same input and lacks any prescribed ordering requirements.&lt;br /&gt;
&lt;br /&gt;
The following are identified forms of &amp;quot;bad&amp;quot; cohesion:&lt;br /&gt;
&lt;br /&gt;
* '''Procedural Cohesion''': This is similar to Sequential Cohesion with different data to work on for each task.&lt;br /&gt;
* '''Temporal Cohesion''': A module's tasks are related only by time. &lt;br /&gt;
* '''Logical Cohesion''': Modules sharing common implementations are grouped. &lt;br /&gt;
* '''Coincidental Cohesion''': A module's tasks are related only when residing in the same module.&lt;br /&gt;
&lt;br /&gt;
In today's vernacular, low cohesion is termed as ''coarse-grained''. &amp;quot;Buy a car&amp;quot; and &amp;quot;run credit history&amp;quot; are examples of two such coarse-grained services offered in an SOA. SOA's success requires adopting &amp;quot;course-grained&amp;quot; services that can be plug-n-played with other sources interchangeably. But it is very much possible that within coarse-grained services, such as buy a car, there may be smaller or finer-grained services like Check Inventory, Schedule Detailing, etc. that make up the larger service, buy a car. Thus SOA and high cohesion as a principle aren't incongruent with each other. High cohesion is rather the foundation of creating coarse-grained services which is the fundamental element of creating a successful SOA implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Enterprise Architecture Vs SOA =&lt;br /&gt;
&lt;br /&gt;
An enterprise architecture (EA) is defined as a conceptual blueprint defining the structure and operation of an organization. The enterprise architecture determines how an organization can achieves its current and future objectives effectively. An enterprise architecture has the following four perspectives:&lt;br /&gt;
&lt;br /&gt;
* '''Business perspective''': This defines the processes and standards used by the business on a day-to-day basis. &lt;br /&gt;
* '''Application perspective''': This defines the interactions among the processes and standards used by the organization.&lt;br /&gt;
* '''Information perspective''': This defines and classifies the raw data (such as document files), that the organization requires.&lt;br /&gt;
* '''Technology perspective''': This defines the hardware, operating systems, programming, and networking solutions used by the organization.&lt;br /&gt;
&lt;br /&gt;
Such an EA offers the following benefits:&lt;br /&gt;
&lt;br /&gt;
* Better decision making.&lt;br /&gt;
* Organizations can adapt better to changing demands or market conditions. &lt;br /&gt;
* Eliminates inefficient and redundant processes.&lt;br /&gt;
* Optimizes the use of organizational assets.&lt;br /&gt;
* Minimizes employee turnover.&lt;br /&gt;
&lt;br /&gt;
Both SOA and EA are used for the benefit of the organization. These two concepts are often confused. The following section discusses how these two concepts are similar, and how they differ.&lt;br /&gt;
&lt;br /&gt;
== Similarities and Differences between SOA and EA ==&lt;br /&gt;
&lt;br /&gt;
The different domains in SOA and EA architecture overlap. But the domains in SOA are a subset of that of EA. For instance, SOA models and develops services and the components that realize them, while the EA architecture deals with SOA-specific artifacts along with other components, packages, and systems for the whole enterprise. The following table shows the mapping between the architecture domains of SOA and EA:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;2&amp;quot; style=&amp;quot;color:black; background-color:LightGrey;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|ARCHITECTURE DOMAIN&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|SOA STACK&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|EA FRAMEWORK   &lt;br /&gt;
|- &lt;br /&gt;
|Business&lt;br /&gt;
|Business process&lt;br /&gt;
|Business architecture&lt;br /&gt;
|-&lt;br /&gt;
|Applications&lt;br /&gt;
|Services and components&lt;br /&gt;
|Appliaction architecture&lt;br /&gt;
|-&lt;br /&gt;
|Operations&lt;br /&gt;
|Quality of Service, security, monitoring, and infrastructure	&lt;br /&gt;
|Technology architecture&lt;br /&gt;
|-&lt;br /&gt;
|Data&lt;br /&gt;
|Data architecture&lt;br /&gt;
|Information architecture  &lt;br /&gt;
|-&lt;br /&gt;
|Integration and Middleware&lt;br /&gt;
|Integration architecture / ESB&lt;br /&gt;
|Technology architecture  &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The following are the similarities between SOA and EA:&lt;br /&gt;
* Both address similar architectural domains.&lt;br /&gt;
* Both intend to align IT closely with business.&lt;br /&gt;
* Both require input based on business objectives.&lt;br /&gt;
* Both involve similar strategies and planning activities.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While EA architecture domains focuses on the macro level, the SOA architecture domains work on a micro level. To be specific,&lt;br /&gt;
&lt;br /&gt;
* EA tends to focus on defining business components, while SOA focuses on business services.&lt;br /&gt;
* EA deals with application frameworks and enterprise applications and SOA with only service modeling.&lt;br /&gt;
* EA deals with enterprise-level infrastructure including servers, databases, etc.  while SOA is for the Enterprise Service Bus.&lt;br /&gt;
* EA addresses enterprise integration patterns and when they should be used. SOA provides a services based integration approach.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Role of SOA in EA ==&lt;br /&gt;
&lt;br /&gt;
As we can see from the above section, though both SOA and EA serve the same purpose, SOA is not same as EA. Instead, SOA can play a role in most of the domains/perspectives of an EA. SOA is one of the best tools for the success of EA projects. SOA bridges EA with the solution architecture and implementation by using layered service components across business and application models, and technology implementation. &lt;br /&gt;
&lt;br /&gt;
SOA helps EA to overcome its challenges. Some of these challenges are as listed below:&lt;br /&gt;
* Reduced stakeholder participation.&lt;br /&gt;
* Modeling the Big picture.&lt;br /&gt;
* Producing meaningful models and conceptual abstractions.&lt;br /&gt;
* Difficulties in EA management life cycle and governance.&lt;br /&gt;
&lt;br /&gt;
Thus, for the smooth and efficient working of an EA, SOA should be an integral part of the EA. Service Oriented Enterprise, Service Oriented Applications/Systems and Service Oriented Infrastructure are a few examples of how SOA can be adopted in an EA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
&lt;br /&gt;
To sum up, SOA is an architectural style and modeling approach that emphasizes on well-defined, loosely-coupled, reusable and shareable services. Its also a practical modeling approach that suits enterprise architecture development very well. It has its criticisms but its benefits far outweigh those.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41690</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6j ss</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41690"/>
		<updated>2010-11-18T00:13:09Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Service-Oriented Architecture'''&lt;br /&gt;
&lt;br /&gt;
A few years ago, it was realized that eventually software capabilities are going to be delivered and consumed as services. Implementing them as tightly coupled systems was definitely an option, but, a service-based interface was required between the point of usage to the portal, device or another end-point. Thus, there was the need of a service-oriented architecture that would facilitate the management of delivery, acquisition, consumption etc in terms of services that are related. This hinted at changes in how software life cycle is managed —right from requirements specifications as services, designing these services, acquisition and outsourcing in the form of services, asset management of services, and so on. Thus, after moving from modules to objects, to components, now was the time to move to services.&lt;br /&gt;
&lt;br /&gt;
This wiki chapter aims at providing an introduction to the vast and growing field of '''''Service Oriented Architecture'''''. The chapter also discusses the different '''design patterns'''[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29] currently in practice for the field of Service-Oriented Architecture. The utilization of the concepts of '''coupling'''[http://en.wikipedia.org/wiki/Coupling_%28computer_science%29] and '''cohesion'''[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29] in Service-Oriented Architecture are described. SOA is contrasted with a similar concept called Enterprise Architecture.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Service-oriented architecture (SOA) is a collection or set of services communicating with each other. Two or more services can communicate either via a simple data passing system or could be coordinating on some activity. For these kind of communications to be possible between the services, some means to connect the various services is required. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Service-oriented architectures were existing in the past and are not a new thing. Many people are familiar with the use of '''DCOM''' [http://en.wikipedia.org/wiki/Distributed_Component_Object_Model] or '''Object Request Brokers''' (ORBs) [http://en.wikipedia.org/wiki/Object_request_broker] which are based on the '''CORBA'''[http://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture] specification.These are the first service-oriented architectures deployed for practical applications. The following section gives a brief description about the evolution of SOA: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Evolution of SOA ==&lt;br /&gt;
&lt;br /&gt;
In many respects, SOA is an evolution based on the '''component-based development''' (CBD). It, in fact, is a quantum leap in bringing business and information technology into closer alignment by supporting business processes. The SOA services are made visible to the consumer, but, the underlying components are kept transparent. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Internet and XML standardization efforts demanded a service definition and description published by a service provider (SP) that could be located and invoked by a service consumer (SC). The service description can be implemented by different service providers, each offering various choices of qualities of service (QoS). The invocation can be across Internet or intranet in a distributed object connotation and standards such as '''WSDL'''[http://en.wikipedia.org/wiki/Web_Services_Description_Language] and '''SOAP'''[http://en.wikipedia.org/wiki/SOAP] have been created. &lt;br /&gt;
&lt;br /&gt;
The roles of SC and SP are illustrated in the following figure:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Scsp.jpg|frame|center|Figure 1: Service Provider and Service Consumer in a SOA]]&lt;br /&gt;
&lt;br /&gt;
== Terminologies ==&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&lt;br /&gt;
A '''service''' is a specific function (business function). For instance, analyzing an individual's credit history or processing a purchase order. It can either provide a single discrete function, such as converting one type of currency into another, or it can perform a set of related business functions, such as handling the various operations in an airline reservations system. Services performing a related set of business functions are said to be '''coarse grained'''. Multiple services work in a coordinated way. This aggregated service can be used for a more complex business requirement. &lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
&lt;br /&gt;
'''''Web services''''' is the most likely connection technology of SOAs. Web services essentially use XML to create a robust connection. A web service can be defined as a service that communicates with clients through a set of standard protocols and technologies. These are standardized and are implemented in platforms and products from various vendors, giving clients and services an opportunity to communicate in a consistent way across a wide spectrum of platforms and operating environments. &lt;br /&gt;
&lt;br /&gt;
'' The important concept is service. Web Services are the set of protocols by which Services are discovered, published and put to use in a technology neutral, standard form. ''&lt;br /&gt;
&lt;br /&gt;
=== Service Oriented Architecture ===&lt;br /&gt;
&lt;br /&gt;
Often is the case that one person's needs being met by capabilities offered by someone else. In the world of distributed computing, this scenario can be thought of one computer agent’s requirements being met by a computer agent belonging to a different owner. A one-to-one correlation is not not necessarily needed between these needs and capabilities. &lt;br /&gt;
&lt;br /&gt;
SOA is a ''view'' of architecture focusing on services as the action boundaries between the needs and capabilities in order to service discovery and re-purposing. Thus, Service Oriented Architecture (SOA) can be defined as a paradigm for organizing and utilizing distributed capabilities that may be in different ownership domains and implemented using various technology stacks. &lt;br /&gt;
&lt;br /&gt;
'' SOA is not only an architecture of services (seen from a technology perspective). It includes the policies, practices, and frameworks to ensure the right services are provided and consumed.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
 &lt;br /&gt;
This example depicts how an information system scenario could benefit from a migration to SOA. Consider an organization that has an application using three business processes using the same functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless1.jpg|frame|center|Figure 2: Three business processes within one company duplicating functionality ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The main disadvantages in the above scenario are:&lt;br /&gt;
* The company pays to implement the same functionality multiple times.&lt;br /&gt;
* Maintainence issues : Consider the situation wherein, a manager wants to deny a user access to all three processes.This requires three different procedures (one for each of the applications).&lt;br /&gt;
&lt;br /&gt;
This system can be made efficient if common tasks are shared across all three processes. This requires decoupling the functionality from each process or application and making a standalone authentication and user management application that could be accessed as a service. Thus, the service itself is being repurposed, and, applications and the company owning it can now have a central point for maintaining it. This shows a simple example of Service Oriented Architecture in practice. The following diagram depicts the same:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless2.jpg|frame|center|Figure 3: Three business processes repurposing one service for common tasks ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Discussion =&lt;br /&gt;
&lt;br /&gt;
== Benefits of SOA ==&lt;br /&gt;
&lt;br /&gt;
The following are the primary reasons which encourages an enterprise to take SOA approach:&lt;br /&gt;
&lt;br /&gt;
* '''Reusability''': SOA allows reuse of business services by enabling developers within an enterprise and/or across enterprises to take the code developed for existing business applications, convert them as web services, and then reuse it to meet new business requirements. This results in  huge savings in the cost and time for application development. The more business services get built and get incorporated into different applications, the more are the benefits of reuse.&lt;br /&gt;
&lt;br /&gt;
* '''Interoperability''': One of the main objectives of SOA is to allow clients and services to communicate and understand each other independent of the platform they use. This objective is met when clients and services have a standard and consistent way of communicating with each other. Web services are used for this purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Scalability''': SOA stresses on having few dependencies between the requesting application and the services it uses. Thus, services tend to be coarse-grained, document-oriented, and asynchronous. Coarse-grained services have the advantage of offering a set of related business functions, a document-oriented service accepts a document as input instead of a numeric value or Java object and an asynchronous service doesn't require the client to wait while it performs its processing. This relatively limited interaction from a client for communicating with a coarse-grained, asynchronous service, provides the scope for applications using these services to scale without increasing the communication load on the network. &lt;br /&gt;
&lt;br /&gt;
* '''Flexibility''': SOA discourages sharing semantics, libraries, and often sharing state. This makes it easier for the application to evolve and keep up with changing business requirements. &lt;br /&gt;
&lt;br /&gt;
* '''Cost Efficiency''': As SOA is a standards-based approach, it results in less costly solutions since the integration of clients and services doesn't require the in-depth analysis and unique code of customized solutions. Also, because ervices ins an SOA are  less costly to maintain and easier to extend. Also many enterprises have a lot of the Web-based infrastructure for a web services-based SOA, further limiting the cost. The biggest cost saving of all comes from the reusability feature of SOA. &lt;br /&gt;
&lt;br /&gt;
*'''Agility''': Services can now be delivered quickly and need not depend on the larger projects common in the organization. The business can understand systems and requires simpler user interfaces calling on services. This in turn, speeds up the time-to-market.&lt;br /&gt;
&lt;br /&gt;
* Promotes good design as the service is designed independent of who its consumers are or will be.&lt;br /&gt;
&lt;br /&gt;
* Eases documentation and testing by separating them  from the issues of the implementation. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that SOA doesn't provide the bebefits mentioned below:&lt;br /&gt;
&lt;br /&gt;
* Simple software engineering&lt;br /&gt;
&lt;br /&gt;
* Free integration or interoperability&lt;br /&gt;
&lt;br /&gt;
* Technology independence&lt;br /&gt;
&lt;br /&gt;
* Vendor independence&lt;br /&gt;
&lt;br /&gt;
* The ultimate architecture for the modern enterprise&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Challenges ==&lt;br /&gt;
&lt;br /&gt;
* Maintaining '''metadata''' related to the services is difficult as each service involves various messages used in communicating and an application can involve many such services, generating a huge number of messages. Also, services are delivered by different organizations within the company or different companies and this needs ''SOA Governance''.&lt;br /&gt;
&lt;br /&gt;
* SOA space lacks testing. This indicates that investment is required in a testing framework that would help find the culprit in the architecture. &lt;br /&gt;
&lt;br /&gt;
* As more services get added for extensibility of the system, security models might require changes. Coming up with appropriate levels of security is a concern.&lt;br /&gt;
&lt;br /&gt;
* SOA with Web Services result in addition of XML layers, requiring XML parsing and composition. Applications run slower and require more processing power when used without '''Remote Procedure Calls'''(RPC) [http://en.wikipedia.org/wiki/Remote_procedure_call] and thus, increase costs. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== SOA Principles ==&lt;br /&gt;
&lt;br /&gt;
There is a set of 10 principles for SOA. The first four are based on Don Box's '''four tenets'''. These principles are as listed below:&lt;br /&gt;
&lt;br /&gt;
* '''Explicit boundaries''': ''Services are inextricably tied to messaging in that the only way into and out of a service are through messages''. This means that everything a service would require for its functionality should be passed to it when it is invoked. &lt;br /&gt;
&lt;br /&gt;
* '''Shared Contract and Schema, not Class''': The service consumer and a service provider involved in the contract should have everything they need to consume or provide the service and should not rely upon each other for any kind of reuse. &lt;br /&gt;
&lt;br /&gt;
* '''Policy- Driven''': Since a service can be accessed from various consumers, a policy mechanism is needed. The functional aspects are described in the service interface, and, policies specify the orthogonal, non-functional capabilities and needs.&lt;br /&gt;
&lt;br /&gt;
* '''Autonomous''': It should be possible to change and deploy, version and manage services independent of each other. The consumers need not  quickly adapt to the new version.&lt;br /&gt;
&lt;br /&gt;
* '''Wire Formats''': A service must be accessible independent of the platform, as long as the platform supports the exchange of messages adhering to the service interface and policies.&lt;br /&gt;
&lt;br /&gt;
* '''Document-Oriented''': Documents are used to send data to interact with services. These documents might contain redundant information.&lt;br /&gt;
&lt;br /&gt;
* '''Loosely-Coupled''': As far as possible, components must be loosely coupled which enables extensibility, easier maintainence and a better system. But it is not always possible. &lt;br /&gt;
&lt;br /&gt;
* '''Standard-complaint''': Standards for technical aspects like data formats, metadata, transport and transfer protocols etc, must be followed.&lt;br /&gt;
&lt;br /&gt;
* '''Vendor Independent''': It should be possible to build a service provider or service consumer using any technology supporting the appropriate standards.&lt;br /&gt;
&lt;br /&gt;
* '''Metadata - Driven''': The metadata artifacts in the SOA should be discoverable, retrievable and interpretable at both design and run time.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Design Patterns in SOA =&lt;br /&gt;
&lt;br /&gt;
''Design Patterns'' describe common problems with their solutions that can be applied repeatedly under a set of constraints. The collection of SOA design patterns forms a master pattern language applicable in various combination and sequences. Compound patterns comprising of multiple individual patterns is also possible. SOA has a huge number of design patterns which can be divided into the following categories: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Foundational Inventory Patterns&lt;br /&gt;
* Logical Inventory Layer Patterns&lt;br /&gt;
* Inventory Centralization Patterns&lt;br /&gt;
* Inventory Implementation Patterns&lt;br /&gt;
* Inventory Governance Patterns&lt;br /&gt;
* Foundational Service Patterns&lt;br /&gt;
* Service Implementation Patterns&lt;br /&gt;
* Service Security Patterns&lt;br /&gt;
* Service Contract Design Patterns&lt;br /&gt;
* Legacy Encapsulation Patterns&lt;br /&gt;
* Service Governance Patterns &lt;br /&gt;
* Capability Composition Patterns&lt;br /&gt;
* Service Messaging Patterns&lt;br /&gt;
* Composition Implementation Patterns&lt;br /&gt;
* Service Interaction Security Patterns&lt;br /&gt;
* Transformation Patterns&lt;br /&gt;
* Common Compound Design Patterns &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A more elaborate list and description of these patterns is available at SOA website[http://soapatterns.org/masterlist_c.php]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it can be seen, the SOA design pattern catalog is very broad. These patterns provide design techniques ranging from adjusting minute validation logic in a service contract to design strategies and help structure pools of services across an entire enterprise. An SOA initiative&lt;br /&gt;
requires attention to the various design details associated with every service delivered, while not loosing the big picture. Design patterns help maintaining this balance by helping overcome common obstacles that have historically inhibited or derailed SOA project plans.&lt;br /&gt;
&lt;br /&gt;
== Working with SOA patterns ==&lt;br /&gt;
&lt;br /&gt;
Here are a few guidelines for utilizing the SOA design patterns to their maximum extent:&lt;br /&gt;
&lt;br /&gt;
* Patterns should be viewed with a Strategic Context &lt;br /&gt;
* Governance has to be considered&lt;br /&gt;
* Patterns can be applied to various extents&lt;br /&gt;
* Some patterns can be evolutionary&lt;br /&gt;
* Patterns can relate to other patterns&lt;br /&gt;
* Every pattern is not suitable for everyone&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Coupling in SOA =&lt;br /&gt;
&lt;br /&gt;
'''Coupling''' specifies the degree of dependency between 2 or more modules. As we know, coupling can be classified as '''Loose Coupling''' and ''' Tight Coupling'''. Loose coupling can be defined as ''the state in which the impact of change (change in consumers, providers, or cross-cutting policies) is minimized across dependencies''. Loose coupling is important across units of deployment, whereas tight coupling is sufficient within a unit of deployment.&lt;br /&gt;
&lt;br /&gt;
The essence of SOA is building composite distributed systems efficiently. In order for the distributed components to be reusable, reliable, available, scalable and fault tolerant, an appropriate level of loose coupling is needed. The impact of any change or modification and failures should be minimum on the landscape of a system as a whole. Loose coupling provides this property by defining and describing interaction patterns between components and technologies involved. Loose coupling also brings the advantage of '''versionability''' in SOA. If A and B depend on each other, loose coupling is needed only when A may version independently from B.  That is, if A and B are versioned together, loose coupling between them is unnecessary. &lt;br /&gt;
&lt;br /&gt;
Services in SOA require described interfaces. This provides a measure of loose coupling as the service dependency isn't a software to software dependency; rather it is N software to interface  dependencies. This shows the importance of individual interface contracts. If an interface contract allows anything, then it has tight coupling between components. &lt;br /&gt;
&lt;br /&gt;
There is no one way to build useful distributed systems that are completely decoupled, rather a variety of choices have to be considered based on various aspects of the systems. A property of a system can become a trade-off compared to other properties. For example, an asynchronous service usually requires the client open up its address space for a &amp;quot;callback&amp;quot; which increases the coupling. Also, loosely couple Web Services wait for messages via queuing mechanism before taking action. A large number of such services would be required to exceed the system load. So, tight coupling them can be considered. New mechanisms to switch loosely coupled Web Services to tightly coupled Web Services to avoid system overloads of scarce resources are being considered.&lt;br /&gt;
&lt;br /&gt;
In summary, Loose coupling manifests itself in the SOA paradigm as follows:&lt;br /&gt;
&lt;br /&gt;
* Creates an abstraction layer between the service producers and service consumers.&lt;br /&gt;
* Promotes flexibility in making changes to the service implementation without impacting the service consumers.&lt;br /&gt;
* In the SOA approach, functionality is organized as a set of modular, reusable shared services that have well-defined interfaces and encapsulate the key rules for accessing the services. They're also built without making any assumptions of who will use or consume these services.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cohesion in SOA =&lt;br /&gt;
'''Cohesion''' is defined as the measure of the relationship between the functionality expressed aby a module and the module itself. It is contrasted with the concept of '''coupling'''. High cohesion correlates to loose coupling.&lt;br /&gt;
&lt;br /&gt;
Cohesion can be classified into various types. Below mentioned are the three &amp;quot;good&amp;quot; types of cohesion identified over the years:&lt;br /&gt;
&lt;br /&gt;
* '''Functional Cohesion''': An individual module does only one thing, resulting in low coupling and reusability.&lt;br /&gt;
* '''Sequential Cohesion''': A module carries out several ordered tasks.&lt;br /&gt;
* '''Communication Cohesion''': A module carries out multiple operations based on the same input and lacks any prescribed ordering requirements.&lt;br /&gt;
&lt;br /&gt;
The following are identified forms of &amp;quot;bad&amp;quot; cohesion:&lt;br /&gt;
&lt;br /&gt;
* '''Procedural Cohesion''': This is similar to Sequential Cohesion with different data to work on for each task.&lt;br /&gt;
* '''Temporal Cohesion''': A module's tasks are related only by time. &lt;br /&gt;
* '''Logical Cohesion''': Modules sharing common implementations are grouped. &lt;br /&gt;
* '''Coincidental Cohesion''': A module's tasks are related only when residing in the same module.&lt;br /&gt;
&lt;br /&gt;
In today's vernacular, low cohesion is termed as ''coarse-grained''. &amp;quot;Buy a car&amp;quot; and &amp;quot;run credit history&amp;quot; are examples of two such coarse-grained services offered in an SOA. SOA's success requires adopting &amp;quot;course-grained&amp;quot; services that can be plug-n-played with other sources interchangeably. But it is very much possible that within coarse-grained services, such as buy a car, there may be smaller or finer-grained services like Check Inventory, Schedule Detailing, etc. that make up the larger service, buy a car. Thus SOA and high cohesion as a principle aren't incongruent with each other. High cohesion is rather the foundation of creating coarse-grained services which is the fundamental element of creating a successful SOA implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Enterprise Architecture Vs SOA =&lt;br /&gt;
&lt;br /&gt;
An enterprise architecture (EA) is defined as a conceptual blueprint defining the structure and operation of an organization. The enterprise architecture determines how an organization can achieves its current and future objectives effectively. An enterprise architecture has the following four perspectives:&lt;br /&gt;
&lt;br /&gt;
* '''Business perspective''': This defines the processes and standards used by the business on a day-to-day basis. &lt;br /&gt;
* '''Application perspective''': This defines the interactions among the processes and standards used by the organization.&lt;br /&gt;
* '''Information perspective''': This defines and classifies the raw data (such as document files), that the organization requires.&lt;br /&gt;
* '''Technology perspective''': This defines the hardware, operating systems, programming, and networking solutions used by the organization.&lt;br /&gt;
&lt;br /&gt;
Such an EA offers the following benefits:&lt;br /&gt;
&lt;br /&gt;
* Better decision making.&lt;br /&gt;
* Organizations can adapt better to changing demands or market conditions. &lt;br /&gt;
* Eliminates inefficient and redundant processes.&lt;br /&gt;
* Optimizes the use of organizational assets.&lt;br /&gt;
* Minimizes employee turnover.&lt;br /&gt;
&lt;br /&gt;
Both SOA and EA are used for the benefit of the organization. These two concepts are often confused. The following section discusses how these two concepts are similar, and how they differ.&lt;br /&gt;
&lt;br /&gt;
== Similarities and Differences between SOA and EA ==&lt;br /&gt;
&lt;br /&gt;
The different domains in SOA and EA architecture overlap. But the domains in SOA are a subset of that of EA. For instance, SOA models and develops services and the components that realize them, while the EA architecture deals with SOA-specific artifacts along with other components, packages, and systems for the whole enterprise. The following table shows the mapping between the architecture domains of SOA and EA:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;2&amp;quot; style=&amp;quot;color:black; background-color:LightGrey;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|ARCHITECTURE DOMAIN&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|SOA STACK&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|EA FRAMEWORK   &lt;br /&gt;
|- &lt;br /&gt;
|Business&lt;br /&gt;
|Business process&lt;br /&gt;
|Business architecture&lt;br /&gt;
|-&lt;br /&gt;
|Applications&lt;br /&gt;
|Services and components&lt;br /&gt;
|Appliaction architecture&lt;br /&gt;
|-&lt;br /&gt;
|Operations&lt;br /&gt;
|Quality of Service, security, monitoring, and infrastructure	&lt;br /&gt;
|Technology architecture&lt;br /&gt;
|-&lt;br /&gt;
|Data&lt;br /&gt;
|Data architecture&lt;br /&gt;
|Information architecture  &lt;br /&gt;
|-&lt;br /&gt;
|Integration and Middleware&lt;br /&gt;
|Integration architecture / ESB&lt;br /&gt;
|Technology architecture  &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The following are the similarities between SOA and EA:&lt;br /&gt;
* Both address similar architectural domains.&lt;br /&gt;
* Both intend to align IT closely with business.&lt;br /&gt;
* Both require input based on business objectives.&lt;br /&gt;
* Both involve similar strategies and planning activities.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While EA architecture domains focuses on the macro level, the SOA architecture domains work on a micro level. To be specific,&lt;br /&gt;
&lt;br /&gt;
* EA tends to focus on defining business components, while SOA focuses on business services.&lt;br /&gt;
* EA deals with application frameworks and enterprise applications and SOA with only service modeling.&lt;br /&gt;
* EA deals with enterprise-level infrastructure including servers, databases, etc.  while SOA is for the Enterprise Service Bus.&lt;br /&gt;
* EA addresses enterprise integration patterns and when they should be used. SOA provides a services based integration approach.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Role of SOA in EA ==&lt;br /&gt;
&lt;br /&gt;
As we can see from the above section, though both SOA and EA serve the same purpose, SOA is not same as EA. Instead, SOA can play a role in most of the domains/perspectives of an EA. SOA is one of the best tools for the success of EA projects. SOA bridges EA with the solution architecture and implementation by using layered service components across business and application models, and technology implementation. &lt;br /&gt;
&lt;br /&gt;
SOA helps EA to overcome its challenges. Some of these challenges are as listed below:&lt;br /&gt;
* Reduced stakeholder participation.&lt;br /&gt;
* Modeling the Big picture.&lt;br /&gt;
* Producing meaningful models and conceptual abstractions.&lt;br /&gt;
* Difficulties in EA management life cycle and governance.&lt;br /&gt;
&lt;br /&gt;
Thus, for the smooth and efficient working of an EA, SOA should be an integral part of the EA. Service Oriented Enterprise, Service Oriented Applications/Systems and Service Oriented Infrastructure are a few examples of how SOA can be adopted in an EA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
&lt;br /&gt;
To sum up, SOA is an architectural style and modeling approach that emphasizes on well-defined, loosely-coupled, reusable and shareable services. Its also a practical modeling approach that suits enterprise architecture development very well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41689</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6j ss</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41689"/>
		<updated>2010-11-18T00:12:39Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Service-Oriented Architecture'''&lt;br /&gt;
&lt;br /&gt;
A few years ago, it was realized that eventually software capabilities are going to be delivered and consumed as services. Implementing them as tightly coupled systems was definitely an option, but, a service-based interface was required between the point of usage to the portal, device or another end-point. Thus, there was the need of a service-oriented architecture that would facilitate the management of delivery, acquisition, consumption etc in terms of services that are related. This hinted at changes in how software life cycle is managed —right from requirements specifications as services, designing these services, acquisition and outsourcing in the form of services, asset management of services, and so on. Thus, after moving from modules to objects, to components, now was the time to move to services.&lt;br /&gt;
&lt;br /&gt;
This wiki chapter aims at providing an introduction to the vast and growing field of '''''Service Oriented Architecture'''''. The chapter also discusses the different '''design patterns'''[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29] currently in practice for the field of Service-Oriented Architecture. The utilization of the concepts of '''coupling'''[http://en.wikipedia.org/wiki/Coupling_%28computer_science%29] and '''cohesion'''[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29] in Service-Oriented Architecture are described. SOA is contrasted with a similar concept called Enterprise Architecture.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Service-oriented architecture (SOA) is a collection or set of services communicating with each other. Two or more services can communicate either via a simple data passing system or could be coordinating on some activity. For these kind of communications to be possible between the services, some means to connect the various services is required. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Service-oriented architectures were existing in the past and are not a new thing. Many people are familiar with the use of '''DCOM''' [http://en.wikipedia.org/wiki/Distributed_Component_Object_Model] or '''Object Request Brokers''' (ORBs) [http://en.wikipedia.org/wiki/Object_request_broker] which are based on the '''CORBA'''[http://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture] specification.These are the first service-oriented architectures deployed for practical applications. The following section gives a brief description about the evolution of SOA: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Evolution of SOA ==&lt;br /&gt;
&lt;br /&gt;
In many respects, SOA is an evolution based on the '''component-based development''' (CBD). It, in fact, is a quantum leap in bringing business and information technology into closer alignment by supporting business processes. The SOA services are made visible to the consumer, but, the underlying components are kept transparent. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Internet and XML standardization efforts demanded a service definition and description published by a service provider (SP) that could be located and invoked by a service consumer (SC). The service description can be implemented by different service providers, each offering various choices of qualities of service (QoS). The invocation can be across Internet or intranet in a distributed object connotation and standards such as '''WSDL'''[http://en.wikipedia.org/wiki/Web_Services_Description_Language] and '''SOAP'''[http://en.wikipedia.org/wiki/SOAP] have been created. &lt;br /&gt;
&lt;br /&gt;
The roles of SC and SP are illustrated in the following figure:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Scsp.jpg|frame|center|Figure 1: Service Provider and Service Consumer in a SOA]]&lt;br /&gt;
&lt;br /&gt;
== Terminologies ==&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&lt;br /&gt;
A '''service''' is a specific function (business function). For instance, analyzing an individual's credit history or processing a purchase order. It can either provide a single discrete function, such as converting one type of currency into another, or it can perform a set of related business functions, such as handling the various operations in an airline reservations system. Services performing a related set of business functions are said to be '''coarse grained'''. Multiple services work in a coordinated way. This aggregated service can be used for a more complex business requirement. &lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
&lt;br /&gt;
'''''Web services''''' is the most likely connection technology of SOAs. Web services essentially use XML to create a robust connection. A web service can be defined as a service that communicates with clients through a set of standard protocols and technologies. These are standardized and are implemented in platforms and products from various vendors, giving clients and services an opportunity to communicate in a consistent way across a wide spectrum of platforms and operating environments. &lt;br /&gt;
&lt;br /&gt;
'' The important concept is service. Web Services are the set of protocols by which Services are discovered, published and put to use in a technology neutral, standard form. ''&lt;br /&gt;
&lt;br /&gt;
=== Service Oriented Architecture ===&lt;br /&gt;
&lt;br /&gt;
Often is the case that one person's needs being met by capabilities offered by someone else. In the world of distributed computing, this scenario can be thought of one computer agent’s requirements being met by a computer agent belonging to a different owner. A one-to-one correlation is not not necessarily needed between these needs and capabilities. &lt;br /&gt;
&lt;br /&gt;
SOA is a ''view'' of architecture focusing on services as the action boundaries between the needs and capabilities in order to service discovery and re-purposing. Thus, Service Oriented Architecture (SOA) can be defined as a paradigm for organizing and utilizing distributed capabilities that may be in different ownership domains and implemented using various technology stacks. &lt;br /&gt;
&lt;br /&gt;
'' SOA is not only an architecture of services (seen from a technology perspective). It includes the policies, practices, and frameworks to ensure the right services are provided and consumed.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
 &lt;br /&gt;
This example depicts how an information system scenario could benefit from a migration to SOA. Consider an organization that has an application using three business processes using the same functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless1.jpg|frame|center|Figure 2: Three business processes within one company duplicating functionality ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The main disadvantages in the above scenario are:&lt;br /&gt;
* The company pays to implement the same functionality multiple times.&lt;br /&gt;
* Maintainence issues : Consider the situation wherein, a manager wants to deny a user access to all three processes.This requires three different procedures (one for each of the applications).&lt;br /&gt;
&lt;br /&gt;
This system can be made efficient if common tasks are shared across all three processes. This requires decoupling the functionality from each process or application and making a standalone authentication and user management application that could be accessed as a service. Thus, the service itself is being repurposed, and, applications and the company owning it can now have a central point for maintaining it. This shows a simple example of Service Oriented Architecture in practice. The following diagram depicts the same:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless2.jpg|frame|center|Figure 3: Three business processes repurposing one service for common tasks ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Discussion =&lt;br /&gt;
&lt;br /&gt;
== Benefits of SOA ==&lt;br /&gt;
&lt;br /&gt;
The following are the primary reasons which encourages an enterprise to take SOA approach:&lt;br /&gt;
&lt;br /&gt;
* '''Reusability''': SOA allows reuse of business services by enabling developers within an enterprise and/or across enterprises to take the code developed for existing business applications, convert them as web services, and then reuse it to meet new business requirements. This results in  huge savings in the cost and time for application development. The more business services get built and get incorporated into different applications, the more are the benefits of reuse.&lt;br /&gt;
&lt;br /&gt;
* '''Interoperability''': One of the main objectives of SOA is to allow clients and services to communicate and understand each other independent of the platform they use. This objective is met when clients and services have a standard and consistent way of communicating with each other. Web services are used for this purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Scalability''': SOA stresses on having few dependencies between the requesting application and the services it uses. Thus, services tend to be coarse-grained, document-oriented, and asynchronous. Coarse-grained services have the advantage of offering a set of related business functions, a document-oriented service accepts a document as input instead of a numeric value or Java object and an asynchronous service doesn't require the client to wait while it performs its processing. This relatively limited interaction from a client for communicating with a coarse-grained, asynchronous service, provides the scope for applications using these services to scale without increasing the communication load on the network. &lt;br /&gt;
&lt;br /&gt;
* '''Flexibility''': SOA discourages sharing semantics, libraries, and often sharing state. This makes it easier for the application to evolve and keep up with changing business requirements. &lt;br /&gt;
&lt;br /&gt;
* '''Cost Efficiency''': As SOA is a standards-based approach, it results in less costly solutions since the integration of clients and services doesn't require the in-depth analysis and unique code of customized solutions. Also, because ervices ins an SOA are  less costly to maintain and easier to extend. Also many enterprises have a lot of the Web-based infrastructure for a web services-based SOA, further limiting the cost. The biggest cost saving of all comes from the reusability feature of SOA. &lt;br /&gt;
&lt;br /&gt;
*'''Agility''': Services can now be delivered quickly and need not depend on the larger projects common in the organization. The business can understand systems and requires simpler user interfaces calling on services. This in turn, speeds up the time-to-market.&lt;br /&gt;
&lt;br /&gt;
* Promotes good design as the service is designed independent of who its consumers are or will be.&lt;br /&gt;
&lt;br /&gt;
* Eases documentation and testing by separating them  from the issues of the implementation. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that SOA doesn't provide the bebefits mentioned below:&lt;br /&gt;
&lt;br /&gt;
* Simple software engineering&lt;br /&gt;
&lt;br /&gt;
* Free integration or interoperability&lt;br /&gt;
&lt;br /&gt;
* Technology independence&lt;br /&gt;
&lt;br /&gt;
* Vendor independence&lt;br /&gt;
&lt;br /&gt;
* The ultimate architecture for the modern enterprise&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Challenges ==&lt;br /&gt;
&lt;br /&gt;
* Maintaining '''metadata''' related to the services is difficult as each service involves various messages used in communicating and an application can involve many such services, generating a huge number of messages. Also, services are delivered by different organizations within the company or different companies and this needs ''SOA Governance''.&lt;br /&gt;
&lt;br /&gt;
* SOA space lacks testing. This indicates that investment is required in a testing framework that would help find the culprit in the architecture. &lt;br /&gt;
&lt;br /&gt;
* As more services get added for extensibility of the system, security models might require changes. Coming up with appropriate levels of security is a concern.&lt;br /&gt;
&lt;br /&gt;
* SOA with Web Services result in addition of XML layers, requiring XML parsing and composition. Applications run slower and require more processing power when used without '''Remote Procedure Calls'''(RPC) [http://en.wikipedia.org/wiki/Remote_procedure_call] and thus, increase costs. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== SOA Principles ==&lt;br /&gt;
&lt;br /&gt;
There is a set of 10 principles for SOA. The first four are based on Don Box's '''four tenets'''. These principles are as listed below:&lt;br /&gt;
&lt;br /&gt;
* '''Explicit boundaries''': ''Services are inextricably tied to messaging in that the only way into and out of a service are through messages''. This means that everything a service would require for its functionality should be passed to it when it is invoked. &lt;br /&gt;
&lt;br /&gt;
* '''Shared Contract and Schema, not Class''': The service consumer and a service provider involved in the contract should have everything they need to consume or provide the service and should not rely upon each other for any kind of reuse. &lt;br /&gt;
&lt;br /&gt;
* '''Policy- Driven''': Since a service can be accessed from various consumers, a policy mechanism is needed. The functional aspects are described in the service interface, and, policies specify the orthogonal, non-functional capabilities and needs.&lt;br /&gt;
&lt;br /&gt;
* '''Autonomous''': It should be possible to change and deploy, version and manage services independent of each other. The consumers need not  quickly adapt to the new version.&lt;br /&gt;
&lt;br /&gt;
* '''Wire Formats''': A service must be accessible independent of the platform, as long as the platform supports the exchange of messages adhering to the service interface and policies.&lt;br /&gt;
&lt;br /&gt;
* '''Document-Oriented''': Documents are used to send data to interact with services. These documents might contain redundant information.&lt;br /&gt;
&lt;br /&gt;
* '''Loosely-Coupled''': As far as possible, components must be loosely coupled which enables extensibility, easier maintainence and a better system. But it is not always possible. &lt;br /&gt;
&lt;br /&gt;
* '''Standard-complaint''': Standards for technical aspects like data formats, metadata, transport and transfer protocols etc, must be followed.&lt;br /&gt;
&lt;br /&gt;
* '''Vendor Independent''': It should be possible to build a service provider or service consumer using any technology supporting the appropriate standards.&lt;br /&gt;
&lt;br /&gt;
* '''Metadata - Driven''': The metadata artifacts in the SOA should be discoverable, retrievable and interpretable at both design and run time.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Design Patterns in SOA =&lt;br /&gt;
&lt;br /&gt;
''Design Patterns'' describe common problems with their solutions that can be applied repeatedly under a set of constraints. The collection of SOA design patterns forms a master pattern language applicable in various combination and sequences. Compound patterns comprising of multiple individual patterns is also possible. SOA has a huge number of design patterns which can be divided into the following categories: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Foundational Inventory Patterns&lt;br /&gt;
* Logical Inventory Layer Patterns&lt;br /&gt;
* Inventory Centralization Patterns&lt;br /&gt;
* Inventory Implementation Patterns&lt;br /&gt;
* Inventory Governance Patterns&lt;br /&gt;
* Foundational Service Patterns&lt;br /&gt;
* Service Implementation Patterns&lt;br /&gt;
* Service Security Patterns&lt;br /&gt;
* Service Contract Design Patterns&lt;br /&gt;
* Legacy Encapsulation Patterns&lt;br /&gt;
* Service Governance Patterns &lt;br /&gt;
* Capability Composition Patterns&lt;br /&gt;
* Service Messaging Patterns&lt;br /&gt;
* Composition Implementation Patterns&lt;br /&gt;
* Service Interaction Security Patterns&lt;br /&gt;
* Transformation Patterns&lt;br /&gt;
* Common Compound Design Patterns &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A more elaborate list and description of these patterns is available at SOA website[http://soapatterns.org/masterlist_c.php]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it can be seen, the SOA design pattern catalog is very broad. These patterns provide design techniques ranging from adjusting minute validation logic in a service contract to design strategies and help structure pools of services across an entire enterprise. An SOA initiative&lt;br /&gt;
requires attention to the various design details associated with every service delivered, while not loosing the big picture. Design patterns help maintaining this balance by helping overcome common obstacles that have historically inhibited or derailed SOA project plans.&lt;br /&gt;
&lt;br /&gt;
== Working with SOA patterns ==&lt;br /&gt;
&lt;br /&gt;
Here are a few guidelines for utilizing the SOA design patterns to their maximum extent:&lt;br /&gt;
&lt;br /&gt;
* Patterns should be viewed with a Strategic Context &lt;br /&gt;
* Governance has to be considered&lt;br /&gt;
* Patterns can be applied to various extents&lt;br /&gt;
* Some patterns can be evolutionary&lt;br /&gt;
* Patterns can relate to other patterns&lt;br /&gt;
* Every pattern is not suitable for everyone&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Coupling in SOA =&lt;br /&gt;
&lt;br /&gt;
'''Coupling''' specifies the degree of dependency between 2 or more modules. As we know, coupling can be classified as '''Loose Coupling''' and ''' Tight Coupling'''. Loose coupling can be defined as ''the state in which the impact of change (change in consumers, providers, or cross-cutting policies) is minimized across dependencies''. Loose coupling is important across units of deployment, whereas tight coupling is sufficient within a unit of deployment.&lt;br /&gt;
&lt;br /&gt;
The essence of SOA is building composite distributed systems efficiently. In order for the distributed components to be reusable, reliable, available, scalable and fault tolerant, an appropriate level of loose coupling is needed. The impact of any change or modification and failures should be minimum on the landscape of a system as a whole. Loose coupling provides this property by defining and describing interaction patterns between components and technologies involved. Loose coupling also brings the advantage of '''versionability''' in SOA. If A and B depend on each other, loose coupling is needed only when A may version independently from B.  That is, if A and B are versioned together, loose coupling between them is unnecessary. &lt;br /&gt;
&lt;br /&gt;
Services in SOA require described interfaces. This provides a measure of loose coupling as the service dependency isn't a software to software dependency; rather it is N software to interface  dependencies. This shows the importance of individual interface contracts. If an interface contract allows anything, then it has tight coupling between components. &lt;br /&gt;
&lt;br /&gt;
There is no one way to build useful distributed systems that are completely decoupled, rather a variety of choices have to be considered based on various aspects of the systems. A property of a system can become a trade-off compared to other properties. For example, an asynchronous service usually requires the client open up its address space for a &amp;quot;callback&amp;quot; which increases the coupling. Also, loosely couple Web Services wait for messages via queuing mechanism before taking action. A large number of such services would be required to exceed the system load. So, tight coupling them can be considered. New mechanisms to switch loosely coupled Web Services to tightly coupled Web Services to avoid system overloads of scarce resources are being considered.&lt;br /&gt;
&lt;br /&gt;
In summary, Loose coupling manifests itself in the SOA paradigm as follows:&lt;br /&gt;
&lt;br /&gt;
* Creates an abstraction layer between the service producers and service consumers.&lt;br /&gt;
* Promotes flexibility in making changes to the service implementation without impacting the service consumers.&lt;br /&gt;
* In the SOA approach, functionality is organized as a set of modular, reusable shared services that have well-defined interfaces and encapsulate the key rules for accessing the services. They're also built without making any assumptions of who will use or consume these services.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cohesion in SOA =&lt;br /&gt;
'''Cohesion''' is defined as the measure of the relationship between the functionality expressed aby a module and the module itself. It is contrasted with the concept of '''coupling'''. High cohesion correlates to loose coupling.&lt;br /&gt;
&lt;br /&gt;
Cohesion can be classified into various types. Below mentioned are the three &amp;quot;good&amp;quot; types of cohesion identified over the years:&lt;br /&gt;
&lt;br /&gt;
* '''Functional Cohesion''': An individual module does only one thing, resulting in low coupling and reusability.&lt;br /&gt;
* '''Sequential Cohesion''': A module carries out several ordered tasks.&lt;br /&gt;
* '''Communication Cohesion''': A module carries out multiple operations based on the same input and lacks any prescribed ordering requirements.&lt;br /&gt;
&lt;br /&gt;
The following are identified forms of &amp;quot;bad&amp;quot; cohesion:&lt;br /&gt;
&lt;br /&gt;
* '''Procedural Cohesion''': This is similar to Sequential Cohesion with different data to work on for each task.&lt;br /&gt;
* '''Temporal Cohesion''': A module's tasks are related only by time. &lt;br /&gt;
* '''Logical Cohesion''': Modules sharing common implementations are grouped. &lt;br /&gt;
* '''Coincidental Cohesion''': A module's tasks are related only when residing in the same module.&lt;br /&gt;
&lt;br /&gt;
In today's vernacular, low cohesion is termed as ''coarse-grained''. &amp;quot;Buy a car&amp;quot; and &amp;quot;run credit history&amp;quot; are examples of two such coarse-grained services offered in an SOA. SOA's success requires adopting &amp;quot;course-grained&amp;quot; services that can be plug-n-played with other sources interchangeably. But it is very much possible that within coarse-grained services, such as buy a car, there may be smaller or finer-grained services like Check Inventory, Schedule Detailing, etc. that make up the larger service, buy a car. Thus SOA and high cohesion as a principle aren't incongruent with each other. High cohesion is rather the foundation of creating coarse-grained services which is the fundamental element of creating a successful SOA implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Enterprise Architecture Vs SOA =&lt;br /&gt;
&lt;br /&gt;
An enterprise architecture (EA) is defined as a conceptual blueprint defining the structure and operation of an organization. The enterprise architecture determines how an organization can achieves its current and future objectives effectively. An enterprise architecture has the following four perspectives:&lt;br /&gt;
&lt;br /&gt;
* '''Business perspective''': This defines the processes and standards used by the business on a day-to-day basis. &lt;br /&gt;
* '''Application perspective''': This defines the interactions among the processes and standards used by the organization.&lt;br /&gt;
* '''Information perspective''': This defines and classifies the raw data (such as document files), that the organization requires.&lt;br /&gt;
* '''Technology perspective''': This defines the hardware, operating systems, programming, and networking solutions used by the organization.&lt;br /&gt;
&lt;br /&gt;
Such an EA offers the following benefits:&lt;br /&gt;
&lt;br /&gt;
* Better decision making.&lt;br /&gt;
* Organizations can adapt better to changing demands or market conditions. &lt;br /&gt;
* Eliminates inefficient and redundant processes.&lt;br /&gt;
* Optimizes the use of organizational assets.&lt;br /&gt;
* Minimizes employee turnover.&lt;br /&gt;
&lt;br /&gt;
Both SOA and EA are used for the benefit of the organization. These two concepts are often confused. The following section discusses how these two concepts are similar, and how they differ.&lt;br /&gt;
&lt;br /&gt;
== Similarities and Differences between SOA and EA ==&lt;br /&gt;
&lt;br /&gt;
The different domains in SOA and EA architecture overlap. But the domains in SOA are a subset of that of EA. For instance, SOA models and develops services and the components that realize them, while the EA architecture deals with SOA-specific artifacts along with other components, packages, and systems for the whole enterprise. The following table shows the mapping between the architecture domains of SOA and EA:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;2&amp;quot; style=&amp;quot;color:black; background-color:LightGrey;&amp;quot;&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|ARCHITECTURE DOMAIN&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|SOA STACK&lt;br /&gt;
!style=&amp;quot;width:25%&amp;quot;|EA FRAMEWORK   &lt;br /&gt;
|- &lt;br /&gt;
|Business&lt;br /&gt;
|Business process&lt;br /&gt;
|Business architecture&lt;br /&gt;
|-&lt;br /&gt;
|Applications&lt;br /&gt;
|Services and components&lt;br /&gt;
|Appliaction architecture&lt;br /&gt;
|-&lt;br /&gt;
|Operations&lt;br /&gt;
|Quality of Service, security, monitoring, and infrastructure	&lt;br /&gt;
|Technology architecture&lt;br /&gt;
|-&lt;br /&gt;
|Data&lt;br /&gt;
|Data architecture&lt;br /&gt;
|Information architecture  &lt;br /&gt;
|-&lt;br /&gt;
|Integration and Middleware&lt;br /&gt;
|Integration architecture / ESB&lt;br /&gt;
|Technology architecture  &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The following are the similarities between SOA and EA:&lt;br /&gt;
* Both address similar architectural domains.&lt;br /&gt;
* Both intend to align IT closely with business.&lt;br /&gt;
* Both require input based on business objectives.&lt;br /&gt;
* Both involve similar strategies and planning activities.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While EA architecture domains focuses on the macro level, the SOA architecture domains work on a micro level. To be specific,&lt;br /&gt;
&lt;br /&gt;
* EA tends to focus on defining business components, while SOA focuses on business services.&lt;br /&gt;
* EA deals with application frameworks and enterprise applications and SOA with only service modeling.&lt;br /&gt;
* EA deals with enterprise-level infrastructure including servers, databases, etc.  while SOA is for the Enterprise Service Bus.&lt;br /&gt;
* EA addresses enterprise integration patterns and when they should be used. SOA provides a services based integration approach.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Role of SOA in EA ==&lt;br /&gt;
&lt;br /&gt;
As we can see from the above section, though both SOA and EA serve the same purpose, SOA is not same as EA. Instead, SOA can play a role in most of the domains/perspectives of an EA. SOA is one of the best tools for the success of EA projects. SOA bridges EA with the solution architecture and implementation by using layered service components across business and application models, and technology implementation. &lt;br /&gt;
&lt;br /&gt;
SOA helps EA to overcome its challenges. Some of these challenges are as listed below:&lt;br /&gt;
* Reduced stakeholder participation.&lt;br /&gt;
* Modeling the Big picture.&lt;br /&gt;
* Producing meaningful models and conceptual abstractions.&lt;br /&gt;
* Difficulties in EA management life cycle and governance.&lt;br /&gt;
&lt;br /&gt;
Thus, for the smooth and efficient working of an EA, SOA should be an integral part of the EA. Service Oriented Enterprise, Service Oriented Applications/Systems and Service Oriented Infrastructure are a few examples of how SOA can be adopted in an EA.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
To sum up, SOA is an architectural style and modeling approach that emphasizes on well-defined, loosely-coupled, reusable and shareable services. Its also a practical modeling approach that suits enterprise architecture development very well.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41452</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6j ss</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6j_ss&amp;diff=41452"/>
		<updated>2010-11-17T22:13:47Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Service-Oriented Architecture''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A few years ago, it was realized that eventually software capabilities are going to be delivered and consumed as services. Implementing them as tightly coupled systems was definitely an option, but, a service-based interface was required between the point of usage to the portal, device or another end-point. Thus, there was the need of a service-oriented architecture that would facilitate the management of delivery, acquisition, consumption etc in terms of services that are related. This hinted at changes in how software life cycle is managed —right from requirements specifications as services, designing these services, acquisition and outsourcing in the form of services, asset management of services, and so on. Thus, after moving from modules to objects, to components, now was the time to move to services.&lt;br /&gt;
&lt;br /&gt;
This wiki chapter aims at providing an introduction to the vast and growing field of '''''Service Oriented Architecture'''''. The chapter also discusses the different '''design patterns'''[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29] currently in practice for the field of Service-Oriented Architecture. The utilization of the concepts of '''coupling'''[http://en.wikipedia.org/wiki/Coupling_%28computer_science%29] and '''cohesion'''[http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29] in Service-Oriented Architecture are described.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Service-oriented architecture (SOA) is a collection or set of services communicating with each other. Two or more services can communicate either via a simple data passing system or could be coordinating on some activity. For these kind of communications to be possible between the services, some means to connect the various services is required. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Service-oriented architectures were existing in the past and are not a new thing. Many people are familiar with the use of '''DCOM''' [http://en.wikipedia.org/wiki/Distributed_Component_Object_Model] or '''Object Request Brokers''' (ORBs) [http://en.wikipedia.org/wiki/Object_request_broker] which are based on the '''CORBA'''[http://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture] specification.These are the first service-oriented architectures deployed for practical applications. The following section gives a brief description about the evolution of SOA: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Evolution of SOA ==&lt;br /&gt;
&lt;br /&gt;
In many respects, SOA is an evolution based on the '''component-based development''' (CBD). It, in fact, is a quantum leap in bringing business and information technology into closer alignment by supporting business processes. The SOA services are made visible to the consumer, but, the underlying components are kept transparent. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Internet and XML standardization efforts demanded a service definition and description published by a service provider (SP) that could be located and invoked by a service consumer (SC). The service description can be implemented by different service providers, each offering various choices of qualities of service (QoS). The invocation can be across Internet or intranet in a distributed object connotation and standards such as '''WSDL'''[http://en.wikipedia.org/wiki/Web_Services_Description_Language] and '''SOAP'''[http://en.wikipedia.org/wiki/SOAP] have been created. &lt;br /&gt;
&lt;br /&gt;
The roles of SC and SP are illustrated in the following figure:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Scsp.jpg|frame|center|Figure 1: Service Provider and Service Consumer in a SOA]]&lt;br /&gt;
&lt;br /&gt;
== Terminologies ==&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
&lt;br /&gt;
A '''service''' is a specific function (business function). For instance, analyzing an individual's credit history or processing a purchase order. It can either provide a single discrete function, such as converting one type of currency into another, or it can perform a set of related business functions, such as handling the various operations in an airline reservations system. Services performing a related set of business functions are said to be '''coarse grained'''. Multiple services work in a coordinated way. This aggregated service can be used for a more complex business requirement. &lt;br /&gt;
&lt;br /&gt;
=== Connections ===&lt;br /&gt;
&lt;br /&gt;
'''''Web services''''' is the most likely connection technology of SOAs. Web services essentially use XML to create a robust connection. A web service can be defined as a service that communicates with clients through a set of standard protocols and technologies. These are standardized and are implemented in platforms and products from various vendors, giving clients and services an opportunity to communicate in a consistent way across a wide spectrum of platforms and operating environments. &lt;br /&gt;
&lt;br /&gt;
'' The important concept is service. Web Services are the set of protocols by which Services are discovered, published and put to use in a technology neutral, standard form. ''&lt;br /&gt;
&lt;br /&gt;
=== Service Oriented Architecture ===&lt;br /&gt;
&lt;br /&gt;
Often is the case that one person's needs being met by capabilities offered by someone else. In the world of distributed computing, this scenario can be thought of one computer agent’s requirements being met by a computer agent belonging to a different owner. A one-to-one correlation is not not necessarily needed between these needs and capabilities. &lt;br /&gt;
&lt;br /&gt;
SOA is a ''view'' of architecture focusing on services as the action boundaries between the needs and capabilities in order to service discovery and re-purposing. Thus, Service Oriented Architecture (SOA) can be defined as a paradigm for organizing and utilizing distributed capabilities that may be in different ownership domains and implemented using various technology stacks. &lt;br /&gt;
&lt;br /&gt;
'' SOA is not only an architecture of services (seen from a technology perspective). It includes the policies, practices, and frameworks to ensure the right services are provided and consumed.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
 &lt;br /&gt;
This example depicts how an information system scenario could benefit from a migration to SOA. Consider an organization that has an application using three business processes using the same functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless1.jpg|frame|center|Figure 2: Three business processes within one company duplicating functionality ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The main disadvantages in the above scenario are:&lt;br /&gt;
* The company pays to implement the same functionality multiple times.&lt;br /&gt;
* Maintainence issues : Consider the situation wherein, a manager wants to deny a user access to all three processes.This requires three different procedures (one for each of the applications).&lt;br /&gt;
&lt;br /&gt;
This system can be made efficient if common tasks are shared across all three processes. This requires decoupling the functionality from each process or application and making a standalone authentication and user management application that could be accessed as a service. Thus, the service itself is being repurposed, and, applications and the company owning it can now have a central point for maintaining it. This shows a simple example of Service Oriented Architecture in practice. The following diagram depicts the same:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Exampless2.jpg|frame|center|Figure 3: Three business processes repurposing one service for common tasks ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Discussion =&lt;br /&gt;
&lt;br /&gt;
== Benefits of SOA ==&lt;br /&gt;
&lt;br /&gt;
The following are the primary reasons which encourages an enterprise to take SOA approach:&lt;br /&gt;
&lt;br /&gt;
* '''Reusability''': SOA allows reuse of business services by enabling developers within an enterprise and/or across enterprises to take the code developed for existing business applications, convert them as web services, and then reuse it to meet new business requirements. This results in  huge savings in the cost and time for application development. The more business services get built and get incorporated into different applications, the more are the benefits of reuse.&lt;br /&gt;
&lt;br /&gt;
* '''Interoperability''': One of the main objectives of SOA is to allow clients and services to communicate and understand each other independent of the platform they use. This objective is met when clients and services have a standard and consistent way of communicating with each other. Web services are used for this purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Scalability''': SOA stresses on having few dependencies between the requesting application and the services it uses. Thus, services tend to be coarse-grained, document-oriented, and asynchronous. Coarse-grained services have the advantage of offering a set of related business functions, a document-oriented service accepts a document as input instead of a numeric value or Java object and an asynchronous service doesn't require the client to wait while it performs its processing. This relatively limited interaction from a client for communicating with a coarse-grained, asynchronous service, provides the scope for applications using these services to scale without increasing the communication load on the network. &lt;br /&gt;
&lt;br /&gt;
* '''Flexibility''': SOA discourages sharing semantics, libraries, and often sharing state. This makes it easier for the application to evolve and keep up with changing business requirements. &lt;br /&gt;
&lt;br /&gt;
* '''Cost Efficiency''': As SOA is a standards-based approach, it results in less costly solutions since the integration of clients and services doesn't require the in-depth analysis and unique code of customized solutions. Also, because ervices ins an SOA are  less costly to maintain and easier to extend. Also many enterprises have a lot of the Web-based infrastructure for a web services-based SOA, further limiting the cost. The biggest cost saving of all comes from the reusability feature of SOA. &lt;br /&gt;
&lt;br /&gt;
*'''Agility''': Services can now be delivered quickly and need not depend on the larger projects common in the organization. The business can understand systems and requires simpler user interfaces calling on services. This in turn, speeds up the time-to-market.&lt;br /&gt;
&lt;br /&gt;
* Promotes good design as the service is designed independent of who its consumers are or will be.&lt;br /&gt;
&lt;br /&gt;
* Eases documentation and testing by separating them  from the issues of the implementation. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should be noted that SOA doesn't provide the bebefits mentioned below:&lt;br /&gt;
&lt;br /&gt;
* Simple software engineering&lt;br /&gt;
&lt;br /&gt;
* Free integration or interoperability&lt;br /&gt;
&lt;br /&gt;
* Technology independence&lt;br /&gt;
&lt;br /&gt;
* Vendor independence&lt;br /&gt;
&lt;br /&gt;
* The ultimate architecture for the modern enterprise&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Challenges ==&lt;br /&gt;
&lt;br /&gt;
* Maintaining '''metadata''' related to the services is difficult as each service involves various messages used in communicating and an application can involve many such services, generating a huge number of messages. Also, services are delivered by different organizations within the company or different companies and this needs ''SOA Governance''.&lt;br /&gt;
&lt;br /&gt;
* SOA space lacks testing. This indicates that investment is required in a testing framework that would help find the culprit in the architecture. &lt;br /&gt;
&lt;br /&gt;
* As more services get added for extensibility of the system, security models might require changes. Coming up with appropriate levels of security is a concern.&lt;br /&gt;
&lt;br /&gt;
* SOA with Web Services result in addition of XML layers, requiring XML parsing and composition. Applications run slower and require more processing power when used without '''Remote Procedure Calls'''(RPC) [http://en.wikipedia.org/wiki/Remote_procedure_call] and thus, increase costs. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== SOA Principles ==&lt;br /&gt;
&lt;br /&gt;
There is a set of 10 principles for SOA. The first four are based on Don Box's '''four tenets'''. These principles are as listed below:&lt;br /&gt;
&lt;br /&gt;
* '''Explicit boundaries''': ''Services are inextricably tied to messaging in that the only way into and out of a service are through messages''. This means that everything a service would require for its functionality should be passed to it when it is invoked. &lt;br /&gt;
&lt;br /&gt;
* '''Shared Contract and Schema, not Class''': The service consumer and a service provider involved in the contract should have everything they need to consume or provide the service and should not rely upon each other for any kind of reuse. &lt;br /&gt;
&lt;br /&gt;
* '''Policy- Driven''': Since a service can be accessed from various consumers, a policy mechanism is needed. The functional aspects are described in the service interface, and, policies specify the orthogonal, non-functional capabilities and needs.&lt;br /&gt;
&lt;br /&gt;
* '''Autonomous''': It should be possible to change and deploy, version and manage services independent of each other. The consumers need not  quickly adapt to the new version.&lt;br /&gt;
&lt;br /&gt;
* '''Wire Formats''': A service must be accessible independent of the platform, as long as the platform supports the exchange of messages adhering to the service interface and policies.&lt;br /&gt;
&lt;br /&gt;
* '''Document-Oriented''': Documents are used to send data to interact with services. These documents might contain redundant information.&lt;br /&gt;
&lt;br /&gt;
* '''Loosely-Coupled''': As far as possible, components must be loosely coupled which enables extensibility, easier maintainence and a better system. But it is not always possible. &lt;br /&gt;
&lt;br /&gt;
* '''Standard-complaint''': Standards for technical aspects like data formats, metadata, transport and transfer protocols etc, must be followed.&lt;br /&gt;
&lt;br /&gt;
* '''Vendor Independent''': It should be possible to build a service provider or service consumer using any technology supporting the appropriate standards.&lt;br /&gt;
&lt;br /&gt;
* '''Metadata - Driven''': The metadata artifacts in the SOA should be discoverable, retrievable and interpretable at both design and run time.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Design Patterns in SOA =&lt;br /&gt;
&lt;br /&gt;
''Design Patterns'' describe common problems with their solutions that can be applied repeatedly under a set of constraints. The collection of SOA design patterns forms a master pattern language applicable in various combination and sequences. Compound patterns comprising of multiple individual patterns is also possible. SOA has a huge number of design patterns which can be divided into the following categories: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Foundational Inventory Patterns&lt;br /&gt;
* Logical Inventory Layer Patterns&lt;br /&gt;
* Inventory Centralization Patterns&lt;br /&gt;
* Inventory Implementation Patterns&lt;br /&gt;
* Inventory Governance Patterns&lt;br /&gt;
* Foundational Service Patterns&lt;br /&gt;
* Service Implementation Patterns&lt;br /&gt;
* Service Security Patterns&lt;br /&gt;
* Service Contract Design Patterns&lt;br /&gt;
* Legacy Encapsulation Patterns&lt;br /&gt;
* Service Governance Patterns &lt;br /&gt;
* Capability Composition Patterns&lt;br /&gt;
* Service Messaging Patterns&lt;br /&gt;
* Composition Implementation Patterns&lt;br /&gt;
* Service Interaction Security Patterns&lt;br /&gt;
* Transformation Patterns&lt;br /&gt;
* Common Compound Design Patterns &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A more elaborate list and description of these patterns is available at SOA website[http://soapatterns.org/masterlist_c.php]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it can be seen, the SOA design pattern catalog is very broad. These patterns provide design techniques ranging from adjusting minute validation logic in a service contract to design strategies and help structure pools of services across an entire enterprise. An SOA initiative&lt;br /&gt;
requires attention to the various design details associated with every service delivered, while not loosing the big picture. Design patterns help maintaining this balance by helping overcome common obstacles that have historically inhibited or derailed SOA project plans.&lt;br /&gt;
&lt;br /&gt;
== Working with SOA patterns ==&lt;br /&gt;
&lt;br /&gt;
Here are a few guidelines for utilizing the SOA design patterns to their maximum extent:&lt;br /&gt;
&lt;br /&gt;
* Patterns should be viewed with a Strategic Context &lt;br /&gt;
* Governance has to be considered&lt;br /&gt;
* Patterns can be applied to various extents&lt;br /&gt;
* Some patterns can be evolutionary&lt;br /&gt;
* Patterns can relate to other patterns&lt;br /&gt;
* Every pattern is not suitable for everyone&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Coupling in SOA =&lt;br /&gt;
&lt;br /&gt;
'''Coupling''' specifies the degree of dependency between 2 or more modules. As we know, coupling can be classified as '''Loose Coupling''' and ''' Tight Coupling'''. Loose coupling can be defined as ''the state in which the impact of change (change in consumers, providers, or cross-cutting policies) is minimized across dependencies''. Loose coupling is important across units of deployment, whereas tight coupling is sufficient within a unit of deployment.&lt;br /&gt;
&lt;br /&gt;
The essence of SOA is building composite distributed systems efficiently. In order for the distributed components to be reusable, reliable, available, scalable and fault tolerant, an appropriate level of loose coupling is needed. The impact of any change or modification and failures should be minimum on the landscape of a system as a whole. Loose coupling provides this property by defining and describing interaction patterns between components and technologies involved. Loose coupling also brings the advantage of '''versionability''' in SOA. If A and B depend on each other, loose coupling is needed only when A may version independently from B.  That is, if A and B are versioned together, loose coupling between them is unnecessary. &lt;br /&gt;
&lt;br /&gt;
Services in SOA require described interfaces. This provides a measure of loose coupling as the service dependency isn't a software to software dependency; rather it is N software to interface  dependencies. This shows the importance of individual interface contracts. If an interface contract allows anything, then it has tight coupling between components. &lt;br /&gt;
&lt;br /&gt;
There is no one way to build useful distributed systems that are completely decoupled, rather a variety of choices have to be considered based on various aspects of the systems. A property of a system can become a trade-off compared to other properties. For example, an asynchronous service usually requires the client open up its address space for a &amp;quot;callback&amp;quot; which increases the coupling. Also, loosely couple Web Services wait for messages via queuing mechanism before taking action. A large number of such services would be required to exceed the system load. So, tight coupling them can be considered. New mechanisms to switch loosely coupled Web Services to tightly coupled Web Services to avoid system overloads of scarce resources are being considered.&lt;br /&gt;
&lt;br /&gt;
In summary, Loose coupling manifests itself in the SOA paradigm as follows:&lt;br /&gt;
&lt;br /&gt;
* Creates an abstraction layer between the service producers and service consumers.&lt;br /&gt;
* Promotes flexibility in making changes to the service implementation without impacting the service consumers.&lt;br /&gt;
* In the SOA approach, functionality is organized as a set of modular, reusable shared services that have well-defined interfaces and encapsulate the key rules for accessing the services. They're also built without making any assumptions of who will use or consume these services.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cohesion in SOA =&lt;br /&gt;
'''Cohesion''' is defined as the measure of the relationship between the functionality expressed aby a module and the module itself. It is contrasted with the concept of '''coupling'''. High cohesion correlates to loose coupling.&lt;br /&gt;
&lt;br /&gt;
Cohesion can be classified into various types. Below mentioned are the three &amp;quot;good&amp;quot; types of cohesion identified over the years:&lt;br /&gt;
&lt;br /&gt;
* '''Functional Cohesion''': An individual module does only one thing, resulting in low coupling and reusability.&lt;br /&gt;
* '''Sequential Cohesion''': A module carries out several ordered tasks.&lt;br /&gt;
* '''Communication Cohesion''': A module carries out multiple operations based on the same input and lacks any prescribed ordering requirements.&lt;br /&gt;
&lt;br /&gt;
The following are identified forms of &amp;quot;bad&amp;quot; cohesion:&lt;br /&gt;
&lt;br /&gt;
* '''Procedural Cohesion''': This is similar to Sequential Cohesion with different data to work on for each task.&lt;br /&gt;
* '''Temporal Cohesion''': A module's tasks are related only by time. &lt;br /&gt;
* '''Logical Cohesion''': Modules sharing common implementations are grouped. &lt;br /&gt;
* '''Coincidental Cohesion''': A module's tasks are related only when residing in the same module.&lt;br /&gt;
&lt;br /&gt;
In today's vernacular, low cohesion is termed as ''coarse-grained''. &amp;quot;Buy a car&amp;quot; and &amp;quot;run credit history&amp;quot; are examples of two such coarse-grained services offered in an SOA. SOA's success requires adopting &amp;quot;course-grained&amp;quot; services that can be plug-n-played with other sources interchangeably. But it is very much possible that within coarse-grained services, such as buy a car, there may be smaller or finer-grained services like Check Inventory, Schedule Detailing, etc. that make up the larger service, buy a car. Thus SOA and high cohesion as a principle aren't incongruent with each other. High cohesion is rather the foundation of creating coarse-grained services which is the fundamental element of creating a successful SOA implementation.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Enterprise Architecture Vs SOA =&lt;br /&gt;
this is enterprise arch vs soa&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34874</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34874"/>
		<updated>2010-09-17T01:57:46Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include [16][17]:&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
One of the first closed source DVCS was the [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] which was widely used in enterprise settings.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar] is one of the most famous open distributed style tree versioning tool. In addition to Bazaar, many other distributed version control software are available. They include: [http://en.wikipedia.org/wiki/Darcs Darcs], [http://en.wikipedia.org/wiki/Monotone_(software) Monotone], [http://en.wikipedia.org/wiki/Mercurial Mercurial], [http://en.wikipedia.org/wiki/Git_(software) Git], [http://en.wikipedia.org/wiki/SVK SVK]. &lt;br /&gt;
&lt;br /&gt;
Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control] Revision control, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Distributed_revision_control] Distributed revision control, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34873</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34873"/>
		<updated>2010-09-17T01:57:17Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include[16][17]:&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
One of the first closed source DVCS was the [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] which was widely used in enterprise settings.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar] is one of the most famous open distributed style tree versioning tool. In addition to Bazaar, many other distributed version control software are available. They include: [http://en.wikipedia.org/wiki/Darcs Darcs], [http://en.wikipedia.org/wiki/Monotone_(software) Monotone], [http://en.wikipedia.org/wiki/Mercurial Mercurial], [http://en.wikipedia.org/wiki/Git_(software) Git], [http://en.wikipedia.org/wiki/SVK SVK]. &lt;br /&gt;
&lt;br /&gt;
Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control] Revision control, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Distributed_revision_control] Distributed revision control, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34870</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34870"/>
		<updated>2010-09-17T01:53:13Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include:[16][17]&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
One of the first closed source DVCS was the [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] which was widely used in enterprise settings.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar] is one of the most famous open distributed style tree versioning tool. In addition to Bazaar, many other distributed version control software are available. They include: [http://en.wikipedia.org/wiki/Darcs Darcs], [http://en.wikipedia.org/wiki/Monotone_(software) Monotone], [http://en.wikipedia.org/wiki/Mercurial Mercurial], [http://en.wikipedia.org/wiki/Git_(software) Git], [http://en.wikipedia.org/wiki/SVK SVK]. &lt;br /&gt;
&lt;br /&gt;
Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control] Revision control, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Distributed_revision_control] Distributed revision control, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34868</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34868"/>
		<updated>2010-09-17T01:40:52Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include:&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
One of the first closed source DVCS was the [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] which was widely used in enterprise settings.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar] is one of the most famous open distributed style tree versioning tool. In addition to Bazaar, many other distributed version control software are available. They include: [http://en.wikipedia.org/wiki/Darcs Darcs], [http://en.wikipedia.org/wiki/Monotone_(software) Monotone], [http://en.wikipedia.org/wiki/Mercurial Mercurial], [http://en.wikipedia.org/wiki/Git_(software) Git], [http://en.wikipedia.org/wiki/SVK SVK]. &lt;br /&gt;
&lt;br /&gt;
Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control] Revision control, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Distributed_revision_control] Distributed revision control, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34866</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34866"/>
		<updated>2010-09-17T01:36:53Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include:&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
One of the first closed source DVCS was the [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] which was widely used in enterprise settings.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar] is one of the most famous open distributed style tree versioning tool. In addition to Bazaar, many other distributed version control software are available. They include: [http://en.wikipedia.org/wiki/Darcs Darcs], [http://en.wikipedia.org/wiki/Monotone_(software) Monotone], [http://en.wikipedia.org/wiki/Mercurial Mercurial], [http://en.wikipedia.org/wiki/Git_(software) Git], [http://en.wikipedia.org/wiki/SVK SVK]. &lt;br /&gt;
&lt;br /&gt;
Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34864</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34864"/>
		<updated>2010-09-17T01:34:29Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include:&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
One of the first closed source DVCS was the [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] which was widely used in enterprise settings.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Bazaar_(software) Bazaar] is one of the most famous open distributed style tree versioning tool. In addition to Bazaar, many other distributed version control software are available. They include:Darcs, Monotone, Mercurial, Git, Monotone, SVK. &lt;br /&gt;
&lt;br /&gt;
Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34863</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34863"/>
		<updated>2010-09-17T01:27:36Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include:&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous open distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other distributed version control software are available. They include:Darcs, Monotone, Mercurial, Git,Monotone, SVK &lt;br /&gt;
Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34862</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34862"/>
		<updated>2010-09-17T01:24:35Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Distributed Revision Control=&lt;br /&gt;
&lt;br /&gt;
Distributed revision control (DVCS) is a fairly new concept in revision control. With it's peer-to-peer approach, each peer's copy of the code base is a bona-fide repository. It synchronizes by exchanging patches between peers. It's advantages over centralized revision control include:&lt;br /&gt;
&lt;br /&gt;
* By default, only the working copy of the code base exist.&lt;br /&gt;
* Since, communication with a central server is not required, common operations are much more faster. Peers need to communicate only when pushing or pulling changes with other peers.&lt;br /&gt;
* Each working copy exists as a remote backup of the code base.&lt;br /&gt;
&lt;br /&gt;
Open systems are the most recent phenomenon in distributed revision control. They are characterized by their support for independent branches, and heavy reliance on merge operations. It is generally characterized by the following features -&lt;br /&gt;
&lt;br /&gt;
* Peers are free to join as and when they wish without going through any elaborate approval process&lt;br /&gt;
* Each working copy works like a branch&lt;br /&gt;
* Selective changes can be &amp;quot;cherry-picked&amp;quot;, pulling them from specific peers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous open distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34840</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34840"/>
		<updated>2010-09-17T00:26:08Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward [http://docstore.mik.ua/orelly/unix/upt/ch20_13.htm deltas] grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, [http://en.wikipedia.org/wiki/Branch_(software) branching] and [http://en.wikipedia.org/wiki/Trunk_(software) tagging] are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34838</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34838"/>
		<updated>2010-09-17T00:15:02Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS, 2005. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Neary, David, Subversion Building a better CVS.Linux Magazine, (30), 59-63.&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Amitash, Difference between CVS and Subversion. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion, 2010. Retrieved September, 2010.&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34836</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34836"/>
		<updated>2010-09-17T00:07:53Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter F., RCS-A system for Version Control.Software—Practice &amp;amp; Experience, 15 (7), 637-654.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System, 2010. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] Vasudevan, Alavoor, CVS-RCS-HOWTO Document for Linux (Source Code Control System),2003.  Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] Collins-Sussman, Ben, Fitpatrick, Brian W. and Pilato, C. Michael, Version Control with Subversion (for Subversion 1.5). O'Reilly Media Inc., California, 2004.&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34833</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34833"/>
		<updated>2010-09-16T23:52:57Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Introducing Bazaar. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] Aran, A Brief History of Version Control Systems. Retrieved September, 2010.&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] Schilling, Jörg, SCCS project. Retrieved September 16,2010.&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34824</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34824"/>
		<updated>2010-09-16T23:27:05Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4), 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Louridas, Panagiotis, Version Control.IEEE Software, 23 (1), 108–109.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34822</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34822"/>
		<updated>2010-09-16T23:22:54Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] Rochkind, Marc J., The Source Code Control System.IEEE Transactions on Software Engineering, SE-1 (4). 364-370.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34734</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=34734"/>
		<updated>2010-09-15T20:40:52Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, there have been 4 generations of VCS[1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style: take two, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example: Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S20_st&amp;diff=33515</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S20 st</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S20_st&amp;diff=33515"/>
		<updated>2010-09-08T05:13:06Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2010/ch1 S10 MS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 GP]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 MM]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S23 GP]]&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33514</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33514"/>
		<updated>2010-09-08T05:12:59Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  being released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [10]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of [http://www.collab.net CollabNet, Inc]. And by late 2001, it started being deployed. [11]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [12] [13] [14] [15]:&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar and others=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  In addition to Bazaar, many other version control software are available. Comparison of version control systems can be found [http://en.wikipedia.org/wiki/Comparison_of_revision_control_software here]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33283</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33283"/>
		<updated>2010-09-07T22:09:21Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [10]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. [11]&lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of CollabNet, Inc [http://www.collab.net]. And by late 2001, it started being deployed. [12]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([13] [14] [15] [16]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33277</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33277"/>
		<updated>2010-09-07T22:08:10Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [10]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of CollabNet, Inc [http://www.collab.net]. And by late 2001, it started being deployed. [12]&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([13] [14] [15] [16]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33275</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33275"/>
		<updated>2010-09-07T22:06:25Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by [http://www.cs.vu.nl/~dick/ Dick Grune] of VU University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [10]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of CollabNet, Inc [http://www.collab.net]. And by late 2001, it started being deployed.&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33274</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33274"/>
		<updated>2010-09-07T22:05:49Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by Dick Grune [http://www.cs.vu.nl/~dick/] of University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [10]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of CollabNet, Inc [http://www.collab.net]. And by late 2001, it started being deployed.&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33273</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33273"/>
		<updated>2010-09-07T22:04:45Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by Dick Grune of University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [10]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
In early 2000 work began on Subversion by  Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999) and his friend Jim Blandy with the backing of CollabNet, Inc [http://www.collab.net]. And by late 2001, it started being deployed.&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://svnbook.red-bean.com/en/1.5/svn.intro.whatis.html] What Is Subversion?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S20_st&amp;diff=33217</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S20 st</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S20_st&amp;diff=33217"/>
		<updated>2010-09-07T20:32:27Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2010/ch1 S10 MS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE_517_Fall_2010/ch1_1a_br]]&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33216</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33216"/>
		<updated>2010-09-07T20:30:20Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by Dick Grune of University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution. [9]&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33215</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33215"/>
		<updated>2010-09-07T20:29:55Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by Dick Grune of University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution.&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Concurrent_Versions_System] Concurrent Versions System&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33214</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33214"/>
		<updated>2010-09-07T20:28:58Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS was originally created by Dick Grune of University of Amsterdam between 1984 and 1985 and was open sourced in 1986. However the code that eventually evolved into the widely used CVS was started by Brian Berliner in early 1989. By late 1990, with help from several others, the first edition was up for distribution.&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33149</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33149"/>
		<updated>2010-09-07T15:33:26Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Subversion=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33118</id>
		<title>CSC/ECE 517 Fall 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33118"/>
		<updated>2010-09-07T06:11:55Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 S10 ms]]&lt;br /&gt;
&lt;br /&gt;
#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33117</id>
		<title>CSC/ECE 517 Fall 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33117"/>
		<updated>2010-09-07T06:11:31Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 S10 ms]]&lt;br /&gt;
&lt;br /&gt;
#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33116</id>
		<title>CSC/ECE 517 Fall 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33116"/>
		<updated>2010-09-07T06:11:23Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33115</id>
		<title>CSC/ECE 517 Fall 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33115"/>
		<updated>2010-09-07T06:11:12Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 S10 ms]]&lt;br /&gt;
&lt;br /&gt;
#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33112</id>
		<title>CSC/ECE 517 Fall 2010/ch1 1a br</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_1a_br&amp;diff=33112"/>
		<updated>2010-09-07T06:08:33Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33110</id>
		<title>CSC/ECE 517 Fall 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33110"/>
		<updated>2010-09-07T06:07:46Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 S10 ms]]&lt;br /&gt;
&lt;br /&gt;
#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33108</id>
		<title>CSC/ECE 517 Fall 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010&amp;diff=33108"/>
		<updated>2010-09-07T06:06:18Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 S10 ms]]&lt;br /&gt;
#REDIRECT [[CSC/ECE 517 Fall 2010/ch1 S10 br]]&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32861</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32861"/>
		<updated>2010-09-06T20:34:46Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following ([10] [11] [12] [13]):&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32860</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32860"/>
		<updated>2010-09-06T20:34:16Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [10] [11] [12] [13].&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32858</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32858"/>
		<updated>2010-09-06T20:33:17Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following [10][11][12][13].&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32853</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32853"/>
		<updated>2010-09-06T20:30:32Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells [9]. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following.&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32839</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32839"/>
		<updated>2010-09-06T20:21:42Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following.&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.faqs.org/docs/Linux-HOWTO/CVS-RCS-HOWTO.html#s2] CVS or RCS ?&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32832</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32832"/>
		<updated>2010-09-06T20:17:48Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following.&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved. Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32830</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32830"/>
		<updated>2010-09-06T20:17:17Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following.&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved.&lt;br /&gt;
Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32828</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32828"/>
		<updated>2010-09-06T20:15:15Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which you can supply to log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following.&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved.&lt;br /&gt;
Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Apache_Subversion] Apache Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32827</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32827"/>
		<updated>2010-09-06T20:13:08Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which you can supply to log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following.&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved.&lt;br /&gt;
Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;br /&gt;
&lt;br /&gt;
[http://www.pushok.com/soft_svn_vscvs.php] SVN vs CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.linux.ie/articles/subversion/] Subversion - a better CVS&lt;br /&gt;
&lt;br /&gt;
[http://www.differencebetween.net/technology/difference-between-cvs-and-subversion/] Difference between CVS and Subversion&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32819</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32819"/>
		<updated>2010-09-06T19:58:26Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which you can supply to log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
Subversion is the next-in-line of  version control system. CVS has a number of problems, primarily caused by its dependency on the RCS file format for versioning files. These and other issues addressed by Subversion include the following.&lt;br /&gt;
*	In CVS, atomicity is not guaranteed. Subversion ensures atomicity.&lt;br /&gt;
*	CVS has no way to rename files and save versioning history. In Subversion, the common history of file1 and file2 is conserved.&lt;br /&gt;
Additionally, Subversion can be used for versioning a lot of different things. Directories and file metadata, as well as renamed or copied files, all have their own versioning.&lt;br /&gt;
*	In CVS, branching and tagging are expensive operations for big repositories and directory trees, which have a cost proportional to the number of files being branched or tagged. Subversion has made both branching and tagging constant time operations. They are implemented simply by copying the directory being tagged. &lt;br /&gt;
*	CVS is not binary file friendly. Any change to a binary file results in the replacement of the old file. Subversion uses a different approach to provide efficient binary diffing which means it can store pdfs and other binary files efficiently. &lt;br /&gt;
*	If we change a file locally using CVS, and we want to know the difference, then the entire file has to be sent to the server. When we change a file using Subversion repository, a copy of the latest repository revision is made locally. The differences are sent in both directions, which mean a lot less use of bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32818</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32818"/>
		<updated>2010-09-06T19:56:09Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;font-size:15px&amp;quot;&amp;gt;                   &lt;br /&gt;
&amp;quot;&amp;lt;i&amp;gt;A source code system is a giant UNDO key-a project-wide time machine&amp;lt;/i&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
							                                                -Andy Hunt and Dave Thomas &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Dozens of version control systems are available in the market. Most of them are open source and free. First version control system was released in the early 1970s and new tools are  released even today. Briefly, VCSs can be categorized into four [1]:&lt;br /&gt;
#File versioning tools, examples: SCCS, RCS&lt;br /&gt;
#Tree versioning Tools-central style, example: CVS&lt;br /&gt;
#Tree versioning tools-central style, example: Subversion &lt;br /&gt;
#Tree versioning tool-distributed style, example Bazaar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Source Code Control System =&lt;br /&gt;
&lt;br /&gt;
The very first version control system[5] is the Source Code Control System, which was originally written by [http://www.informit.com/authors/bio.aspx?a=AFAC0A13-A141-47D6-B508-04A03D7B4634 Marc J. Rochkind] in 1972 at Bell Labs, NJ. It is designed to help programming projects control changes to source code. SCCS provides facilities for storing, updating and retrieving all versions of modules by version number, and it records: who made software change, when and where it was made as well as the reason of the change. The first two implementations of SCCS were: one for IBM 370 under OS and other one for PDP 11under UNIX. [2][3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source Code control System can be categorized under file versioning tools. It only versions individual files. SCCS was an effective method for small projects. One Source file results in one SCCS history file. It is easy to understand format of the history files that allows manual intervention. Also, checksums and forward deltas grant file integrity and immediate detection of corruption. It was the major form of source code control especially on UNIX platforms until the release of Revision Control Systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Revision Control System=&lt;br /&gt;
&lt;br /&gt;
Revision Control System[7] is the successor to SCCS and written by [http://www.ipd.uni-karlsruhe.de/~tichy/ Walter F. Tichy] (now a faculty of University Karlsruhe, Germany) in 1982 at Purdue University. Just like SCCS, RVS is a file versioning tool. The fundamental storage unit is a revision group. Also it supports branches within a file. Unlike SCCS it supports merges. RCS storage on the mainline uses reserve deltas: The latest revision is stored intact but earlier revisions are stored as deltas from the latest. On branches, revisions are stored as forward deltas. Thus checking out branches is slow. For Example:Main line of code has 100 revisions. Assume that there is branch at revision 10. This branch has 80 revisions. To check out the branch tip, RCS must do the followings:&lt;br /&gt;
&lt;br /&gt;
* Retrieve mainline revision 100&lt;br /&gt;
* Retrieve and apply reverse deltas from 99 down to 10&lt;br /&gt;
* Retrieve and apply 80 forward deltas on the branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additionally, in the early 80s, when RCS was released, there were also competitors such as: IBM CLEAR/CASTER, AT&amp;amp;T SCCS, and CMU Software Development control system.&lt;br /&gt;
&lt;br /&gt;
=Concurrent Version System=&lt;br /&gt;
&lt;br /&gt;
CVS , while using RCS underneath, is a lot more powerful tool and can control a complete source code tree. It can be greatly customized with scripting languages like PERL, Korn and bash shells. &lt;br /&gt;
&lt;br /&gt;
CVS offers the following significant advantages over RCS:&lt;br /&gt;
*	It can run scripts which you can supply to log CVS operations or enforce site-specific polices.&lt;br /&gt;
*	CVS enables developers from different geographical location to function as a single team. Information is stored on a single central server and the client machines have a copy of all the files. The client- server connection must be up to perform CVS operations but need not be up to edit or manipulate the current versions of the files. &lt;br /&gt;
*	It can merge changes from non-CVS vendor branches.&lt;br /&gt;
*	Allows more than one developer to work on the same file at the same time&lt;br /&gt;
*	CVS servers run on most OS including unix-variants, Windows and OS/2 etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SVN=&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Bazaar=&lt;br /&gt;
&lt;br /&gt;
Bazaar is one of the most famous distributed style tree versioning tool. Distributed structure is superior to central style version control systems in [http://wiki.bazaar.canonical.com/BzrWhy many terms].  &lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
Using VCS has many benefits. For example: if a team conducts the project, there will be harmony among the team members, and no one will write over other people’s code. Moreover, every change (version) will be stored in VCS repository. This will enable team members to see the differences between versions of the same file, and they will know the time of the changes as well as the responsible team member. Furthermore, Development can be spit into different branches, each branch, lets say keeping track of the fixes associated with a software release. Then file versions can be obtained with a branch and can be applied to the same fix to multiple branches. Another benefit is that, VCS repository can be useful to understand how good the project was: How many lines changed from the previous version? Which are the most and least productive days of the week? Which team member made the most contribution? [8]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/introducing_bazaar.html] Bazaar v2.1 Documentation&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/pysync/wiki/VCSHistory] A Brief History of VCS&lt;br /&gt;
&lt;br /&gt;
[http://sccs.berlios.de/] SCCS - The POSIX Source Code Control System&lt;br /&gt;
&lt;br /&gt;
[http://basepath.com/aup/talks/SCCS-Slideshow.pdf] The Source Code Control System by Marc J. Rochkind&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Source_Code_Control_System] Source Code Control Systems&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.purdue.edu/homes/trinkle/RCS/rcs.ps] Tichy, Walter RCS-A system for Version Control&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_Control_System] Revision control System&lt;br /&gt;
&lt;br /&gt;
[http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.32] Version Control Systems,” by Diomidis Spinellis (IEEE Software, vol. 22, no. 5, 2005, pp. 108–109)&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32501</id>
		<title>History of version-control systems (Wiki textbook Team4)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=History_of_version-control_systems_(Wiki_textbook_Team4)&amp;diff=32501"/>
		<updated>2010-09-03T18:43:32Z</updated>

		<summary type="html">&lt;p&gt;Marashid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RBP/OO Interactions =&lt;br /&gt;
&lt;br /&gt;
:It would be good if OO programs could interact with OO databases, but alas, relational databases have a 99% market share. This has led to many attempts to access them from OO languages. Design patterns and implementations for doing this have been developed, starting with [http://c2.com/cgi/wiki?CrossingChasms Crossing Chasms] and extending to [http://en.wikipedia.org/wiki/ActiveRecord_(Rails) Rails' ActiveRecord] [http://wiki.rubyonrails.org/rails/pages/ActiveRecord][http://ar.rubyonrails.com/]. Here, we investigate the various approaches for marrying OO programs to relational databases, comparing them in terms of ease of programming, robustness, and efficiency.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This article explores object-relation mapping [http://en.wikipedia.org/wiki/Object-relational_mapping (ORM)], a programming technique that bridges object-oriented languages against relational databases, and compares them against more traditional approaches to database programming such as stored procedures and dynamic [http://en.wikipedia.org/wiki/Sql SQL]. In the process, we examine basic design patterns for bridging this gap, and evaluate several popular ORM frameworks found in popular program languages in the process.&lt;br /&gt;
&lt;br /&gt;
One of the primary problems that object-relational mapping (ORM) attempts to solve is that of [http://www.service-architecture.com/object-oriented-databases/articles/transparent_persistence.html transparent object persistence], which allows an object to outlive the process that created it. The state of an object can be stored to disk, and an object with the same state can be re-created in the future. This object data is typically internally stored in a relational database using SQL.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, relational databases lie at the core of any modern Enterprise application, and such tabular representation of SQL data is fundamentally different than the network of objects used in object-oriented applications. ORM allows us to interact with business objects directly in an object-oriented domain model, instead of having to work with rows and columns at the programming level.  For further introduction to ORM and the surrounding issues, refer to [http://www.agiledata.org/essays/mappingObjects.html][http://www.acmqueue.org/modules.php?name=Content&amp;amp;pa=printer_friendly&amp;amp;pid=538&amp;amp;page=1][http://digitalcommons.macalester.edu/context/mathcs_honors/article/1006/type/native/viewcontent/][http://www.rgoarchitects.com/Files/ormappin.pdf].&lt;br /&gt;
&lt;br /&gt;
= Design Patterns =&lt;br /&gt;
&lt;br /&gt;
Design patterns provide the theoretical underpinnings for the object-relational tools that we use in practice today. One of the first design pattern languages exploring the bridge between object-oriented domains and relational domains is Crossing Chasms.&lt;br /&gt;
&lt;br /&gt;
# The ''Chasm'' in [http://www.ksc.com/articles/patternlanguage.htm Crossing Chasms] refers to the semantic and structural gap between data in an object oriented application and the representation and access of that data in a database. As a [http://en.wikipedia.org/wiki/Pattern_language Pattern Language], Crossing Chasms captures multiple proven methods for effectively integrating an object oriented application and a relational database. These solutions are grouped into two broad categories, [http://www.ksc.com/articles/staticpatterns.htm Static Patterns], useful in data modeling and database table design, and [http://www.ksc.com/articles/crossingchasms.htm Architectural Patterns], useful primarily for designing overall systems to be as effective as possible in the dynamic interaction between data and objects. Originally developed to integrate Smalltalk applications to relational databases, and rooted in the theory of Object Orientation from Jacobsen to Rumbaugh, the patterns have been abstracted and refined to capture the best practices of the experts in OO database integration, whatever the platform.  The architectural patterns include ''Four Layer Architecture'', ''Trim And Fit Client'', and ''Phase In Tiers'', which we summarize here.&lt;br /&gt;
# The [http://c2.com/cgi/wiki?FourLayerArchitecture Four Layer Architecture] improves upon the classical 'Model-View-Controller' application design by first recognizing the 'M-V-C' architecture, while an evolutionary gain, is inadequate to support every possible application environment, especially, the challenges associated with database integration and communication.  Three of the layers of the 'Four Layer Architecture' closely follow the 'Model', 'View', and 'Controller', with the addition of the 'Infrastructure' Layer to handle the database tables and communication links.&lt;br /&gt;
# Closely related to the Four Layer Architecture is the [http://c2.com/cgi/wiki?TrimAndFitClient Trim And Fit Client], the pattern describing how to partition the processing workload between the client and server.  The factors driving the decision of how much work the client should do are very dynamic, given Moore's Law and increases in efficiency for communication links as well as memory, yet the 'Trim And Fit Client' pattern provides a timeless solution.  Leveraging the architectural segments provided by the 'Four Layer Architecture', 'Trim And Fit Client' guides the designer to partition responsibility between the client and server at an arbitrary point either in the Application Models, or between the Application and Domain Model layers.  This scheme gives the designer the flexibility to allocate the workload in an optimal way for the particular constraints in place, without being forced into a design situation with an imbalanced workload.&lt;br /&gt;
# [http://c2.com/cgi-bin/wiki/wiki?PhaseInTiers Phase In Tiers] presents the best practices to engage when designing a constantly expanding data center. Although it may be difficult for the architect to estimate the capacity required for the system, and nearly impossible for the developers to continuously migrate new applications and data to the growing network of database, client applications, and servers, the 'Phase In Tiers' pattern helps the enterprise architect stay ahead of the challenge. Incorporating another pattern, the [http://c2.com/cgi/wiki?ThreeTierDistributionArchitecture Three-Tier Distribution Architecture], which provides justification for the now commonplace three-tiered enterprise application-platform split of client-server-database, 'Phase In Tiers' shows how to implement new designs in stages, over time, without breaking existing applications, or slowing the roll-out of new features.  The key idea of 'Phase In Tiers' is to build new functionality into clients, and execute staged migration of application layers from the client to servers.&lt;br /&gt;
&lt;br /&gt;
= Concrete Examples =&lt;br /&gt;
&lt;br /&gt;
To motivate our discussions, it is helpful to provide practical, concrete reference examples of object-relational frameworks against traditional dynamic SQL approaches. One can think of these examples as the &amp;quot;Hello World&amp;quot; of DB interfacing.&lt;br /&gt;
&lt;br /&gt;
== Embedded (Ad-Hoc) SQL ==&lt;br /&gt;
&lt;br /&gt;
The traditional approach uses simple strings and API calls to connect to databases and return their results. In this example in PHP, the title and date of the event with an ID greater than 5 is echoed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;?php&lt;br /&gt;
  $link = mysql_connect('localhost', 'mysql_user',&lt;br /&gt;
      'mysql_password');&lt;br /&gt;
  if (!$link) {&lt;br /&gt;
      die('Could not connect: ' . mysql_error());&lt;br /&gt;
  }&lt;br /&gt;
  echo 'Connected successfully';&lt;br /&gt;
  mysql_close($link);&lt;br /&gt;
  &lt;br /&gt;
  $sql = &amp;quot;SELECT title, date&lt;br /&gt;
        FROM   events&lt;br /&gt;
        WHERE  id &amp;gt; 5&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  $result = mysql_query($sql);&lt;br /&gt;
  &lt;br /&gt;
  while ($row = mysql_fetch_assoc($result)) {&lt;br /&gt;
    echo $row[&amp;quot;title&amp;quot;];&lt;br /&gt;
    echo $row[&amp;quot;date&amp;quot;];&lt;br /&gt;
  }&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stored Procedures ==&lt;br /&gt;
&lt;br /&gt;
Stored procedures are mechanisms that encapsulate SQL queries and other SQL business logic within the database server itself. It has the advantage of decoupling the SQL syntax from the client application, but calls to these stored procedures themselves are still not transparent from within the client application. An [http://www.sqlteam.com/article/stored-procedures-an-overview example of a SQL stored procedure] in Microsoft SQL Server is as follows:&lt;br /&gt;
&lt;br /&gt;
  CREATE PROCEDURE spCaliforniaAuthors&lt;br /&gt;
  AS&lt;br /&gt;
    SELECT * FROM authors&lt;br /&gt;
    WHERE state = 'CA'&lt;br /&gt;
    ORDER BY zip&lt;br /&gt;
&lt;br /&gt;
This stored procedure is kept on the database. The application can then call the stored procedure &amp;lt;tt&amp;gt;spCaliforniaAuthors&amp;lt;/tt&amp;gt; directly, without concerning themselves with the lower level implementation details.&lt;br /&gt;
&lt;br /&gt;
== The ORM Approach ==&lt;br /&gt;
&lt;br /&gt;
Using object-relational mapping, the internal connection details are hidden, usually in external configuration files. The application developer need not have any knowledge of SQL programming, and can manipulate and access database objects in an object-oriented domain. In this example using Java and Hibernate, the programmer created a new event and then saves it to a database:&lt;br /&gt;
  &lt;br /&gt;
  Session session = HibernateUtil.getSessionFactory().&lt;br /&gt;
      getCurrentSession();&lt;br /&gt;
  session.beginTransaction();&lt;br /&gt;
  &lt;br /&gt;
  Event theEvent = new Event();&lt;br /&gt;
  theEvent.setTitle(title);&lt;br /&gt;
  theEvent.setDate(date);&lt;br /&gt;
  session.save(theEvent);&lt;br /&gt;
  &lt;br /&gt;
  session. getTransaction().commit();]&lt;br /&gt;
&lt;br /&gt;
== Microsoft LINQ ==&lt;br /&gt;
&lt;br /&gt;
Microsoft provides a hybrid approach to object-relational mapping, called LINQ, which [http://msdn.microsoft.com/en-us/library/bb425822.aspx interleaves database metadata with object-oriented programming] to allow for language-integrated querying of relational databases.&lt;br /&gt;
&lt;br /&gt;
  [Table(Name=&amp;quot;Customers&amp;quot;)]&lt;br /&gt;
  public class Customer&lt;br /&gt;
  {&lt;br /&gt;
     [Column(IsPrimaryKey=true)]&lt;br /&gt;
     public string CustomerID;&lt;br /&gt;
     [Column]&lt;br /&gt;
     public string City;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Unlike other ORM mechanics, which try to hide non-OO querying as much as possible, or use external library calls for direct SQL queries, LINQ to SQL provides a run time infrastructure for managing relational data as objects without losing the ability to query through SQL-like constructs:&lt;br /&gt;
&lt;br /&gt;
  var q =&lt;br /&gt;
     from c in Customers&lt;br /&gt;
     where c.City == &amp;quot;London&amp;quot;&lt;br /&gt;
     select c;&lt;br /&gt;
  &lt;br /&gt;
  foreach (var cust in q)&lt;br /&gt;
     Console.WriteLine(&amp;quot;id = {0}, City = {1}&amp;quot;, &lt;br /&gt;
           cust.CustomerID, cust.City);&lt;br /&gt;
&lt;br /&gt;
These SQL-like constructs are integrated into the language itself, without the need for external library calls, and are available to non-database data structures as well, if they support the appropriate interfaces.&lt;br /&gt;
&lt;br /&gt;
= Comparison =&lt;br /&gt;
&lt;br /&gt;
With our examples in hand, we can now discuss the advantages and disadvantages of the various approaches to marrying object-oriented programming and relational databases.&lt;br /&gt;
&lt;br /&gt;
== Ease of Programming ==&lt;br /&gt;
&lt;br /&gt;
Those who come from a database background find embedded SQL easy to use because queries are written in a SQL language that they are already familiar with. The other advantage of embedded SQL is that it allows the application developers to exploit the properties and function of their particular database, at the expense of reducing portability of the application. From a debugging perspective, the database logic is directly embedded within the source code, which avoids the [http://wapedia.mobi/en/Yo-yo_problem yo-yo effect] between the application source and database source. [http://www.codinghorror.com/blog/archives/000117.html].&lt;br /&gt;
&lt;br /&gt;
Stored procedures fare slightly better and have some benefits over embedded SQL. [http://articles.techrepublic.com.com/5100-10878_11-5766837.html] They decouple the database logic from the application logic, where database programmers can work on database logic and application programmers can independently work on application logic. In addition, stored procedures can be changed without having to recompile the application, leading to more modular implementations.&lt;br /&gt;
&lt;br /&gt;
Still, the use of stored procedures is not without criticism. Stored Procedures are written in big iron database languages like PL/SQL or T-SQL, which tend to be archaic in functionality. Stored procedures cannot be debugged easily because they cannot be debugged in the same process as the application. Finally, stored procedures cannot pass objects, and instead must pass primitive data types back and forth, often resulting in passing back and forth an overly large number of parameters to these procedures to accomplish a task. [http://www.codinghorror.com/blog/archives/000117.html]&lt;br /&gt;
&lt;br /&gt;
ORM frameworks have the advantage in that developers work with objects and the mapping tools that enable data persistence.&lt;br /&gt;
transparently. For most applications, this provides a natural object-oriented way to access relational databases. When queries are required that cannot easily be expressed in an object-oriented domain, these ORM tools typically provide standardized, proprietary SQL-like syntax, such as HSQL, thereby abstracting the details of the database itself.[http://espresso.cs.up.ac.za/publications/Espresso%20SAICSIT%20ODBMS%20Presentation%20v6.pdf]&lt;br /&gt;
&lt;br /&gt;
While most ORM frameworks are easy to program from an application developer perspective, the initial configuration of such frameworks can be daunting due to the framework's generality and [http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html large number of configuration parameters]. Configuration of ORM is difficult enough that there exist meta code generation tools such as [http://www.hibernate.org/72.html XDoclet] and [http://boss.bekk.no/boss/middlegen/ Middlegen], which can be thought of as compilers in their own right.&lt;br /&gt;
&lt;br /&gt;
Finally, let us look at [http://en.wikipedia.org/wiki/Language_Integrated_Query LINQ], a variation of ORM which adds querying capabilities to .NET 2.0 and provides operations similar to that of SQL. LINQ's major advantage is that it provides consistent domain modeling, while hiding the mundane code (LINQ-to-SQL) that often gets exposed either in configuration of ORM or in embedded SQL. [http://blogs.vertigo.com/personal/petar/Blog/archive/2008/01/04/why-we-notneed-to-use-linq.aspx] LINQ also provides one source and query language for multiple data stores, such as relational data, XML data, and other .NET objects [http://www.eleves.ens.fr/home/rossant/docs/linq.pdf], and it is integrated within the syntax of the language. With respect to ease of programming, LINQ is a clear winner, but its model of embedding database metadata and querying directly within application logic may be met with resistance by individuals who prefer separating database programmers from application developers. [http://reddevnews.com/features/article.aspx?editorialsid=707] LINQ is also specifically developed for use in Microsoft Visual Studio, and does not work in other languages or environments.&lt;br /&gt;
&lt;br /&gt;
== Robustness ==&lt;br /&gt;
&lt;br /&gt;
While embedded SQL is one of the easiest ways to connect to a database, it is also one of the least robust. Embedded SQL is commonly subject to [http://en.wikipedia.org/wiki/SQL_injection SQL injection] attacks, though these attacks can be mitigated by libraries with careful programming. Embedded SQL also reduces the elegance of code by increasing coupling between the database and the application itself. In the PHP sample code provided, for instance, the code is tied to a MySQL database using the &amp;lt;tt&amp;gt;mysql_connect&amp;lt;/tt&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
Since the SQL code is interspersed between lines of non-SQL code, it can be difficult to maintain and modify if the SQL code needs to be modified. Indeed, there is significant impact to the understandability, testability, adaptability, and other quality aspects of the overall system.[http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/proceedings/&amp;amp;toc=comp/proceedings/scam/2007/2880/00/2880toc.xml&amp;amp;DOI=10.1109/SCAM.2007.23] Despite these issues, embedded SQL remains a popular choice because it works relatively well for many smaller business applications that mainly do basic [http://en.wikipedia.org/wiki/Create,_read,_update_and_delete CRUD] operations, even in languages like Java that support object-oriented design.&lt;br /&gt;
&lt;br /&gt;
Stored procedures are certainly more robust than embedded SQL. Since SQL code stays in the database, and application code stays in the application, it is easier to maintain. The [http://msdn.microsoft.com/en-us/library/ms978510.aspx .NET Data Access Architecture Guide] specifies other reasons that stored procedures are more robust:&lt;br /&gt;
&lt;br /&gt;
# Stored procedures can be individually secured within the database. A client can be granted permissions to execute a stored procedure without having any permissions on the underlying tables.&lt;br /&gt;
# Stored procedures result in easier maintenance because it is generally easier to modify a stored procedure than it is to change a hard-coded SQL statement within a deployed component.&lt;br /&gt;
# Stored procedures add an extra level of abstraction from the underlying database schema. The client of the stored procedure is isolated from the implementation details of the stored procedure and from the underlying schema.&lt;br /&gt;
&lt;br /&gt;
Finally, we turn to ORM and LINQ. Both of these mechanisms can be considered robust because they [http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html abstract entirely the database connection details] and handling from the application developer. One can change databases from say, Microsoft SQL Server to PostgreSQL, with no change in application logic other than the editing of the ORM database configuration files. However, this increased robustness is a trade off and requires sacrifices in ease of programming with respect to smaller projects and potential sacrifices in performance and efficiency, as will be discussed in the following section.&lt;br /&gt;
&lt;br /&gt;
== Efficiency ==&lt;br /&gt;
&lt;br /&gt;
The efficiency of the different mechanisms for database access are depend on the application, implementation, and a variety of other factors. As such, we describe the differences in efficiency only qualitatively rather than quantitatively.&lt;br /&gt;
&lt;br /&gt;
At first glance, it may appear that embedded SQL is highly efficient. After all, embedded SQL queries are low-level strings passed directly to the SQL database, and SQL queries can be custom written to take advantage of special capabilities of the particular database. Similarly, others believe that the overhead of processing stored procedures results in a performance penalty. The real answer is not as cut and dried, especially when comparing against stored procedures. Here's why: [http://codebetter.com/blogs/karlseguin/archive/2008/01/02/foundations-of-programming-part-6-nhibernate.aspx]&lt;br /&gt;
&lt;br /&gt;
# In many cases, you can get better performance by looping and filtering data within the database than at the Data Access Layer. This is because databases are intrinsically designed to do this, while application developers have to write their own code.&lt;br /&gt;
# Stored procedures can be used to batch common work together or retrieve multiple sets of data. This batching of data reduces network traffic and and consolidates work.&lt;br /&gt;
# Many databases can also take advantage of execution plans, which allow them to cache stored procedures versus embedded SQL where each execution would have to be recalculated for each request.&lt;br /&gt;
# Databases tend to optimize better the closer they are to the bare metal. The easiest way to get performance out of your database is to do everything you can to take advantage of the platform you are running on, which means running queries as close to the database as possible.&lt;br /&gt;
&lt;br /&gt;
ORM approaches have the opposite default criticism since many assume that their efficiency is lower than stored procedures or embedded SQL because of their overhead in performing O/R mapping. Again, the answer is not as clear cut. Let us examine one of more popular ORM frameworks, Hibernate, for evidence: Hibernate implements an extremely high-concurrency architecture with no resource-contention issues (apart from the obvious - contention for access to the database). This architecture scales extremely well as concurrency increases in a cluster or on a single machine. [http://www.hibernate.org/15.html]&lt;br /&gt;
&lt;br /&gt;
LINQ users can achieve optimum performance by leveraging the capabilities of their platform [http://www.singingeels.com/Articles/Improving_Performance_With_LINQ.aspx].  Knowing how to utilize the LINQ data context in conjunction with appropriately crafted queries permits the implementation to avoid unnecessary database activity, such as eliminating write-backs when no data has changed.&lt;br /&gt;
&lt;br /&gt;
For those interested in competitive performance challenges, the [http://www.polepos.org/ PolePosition] benchmark suite provides rigorous comparison of ORM application-implementation pairs, with some test data archived at their site for specific implementations running well-defined test cases.&lt;br /&gt;
&lt;br /&gt;
= Implementations =&lt;br /&gt;
&lt;br /&gt;
Languages and environments as diverse as .Net and PHP support ORM [http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software].&lt;br /&gt;
&lt;br /&gt;
We will focus on specific implementations in Java, Ruby on Rails, Microsoft .NET, PHP, ASP Classic, and JDBC.&lt;br /&gt;
&lt;br /&gt;
== ORM in Java ==&lt;br /&gt;
&lt;br /&gt;
In recent years, Java has experienced a paradigm shift from complex heavy-weight frameworks such as [http://java.sun.com/products/ejb/ Enterprise Java Beans] to more light-weight agile frameworks that rely instead of simple Plain Old Java Objects ([http://en.wikipedia.org/wiki/POJO POJOs]). This in turn, has increased the popularity of ORM for Java developers.&lt;br /&gt;
&lt;br /&gt;
Indeed, Object-relational mapping is especially popular in the Java community, compared, for example to .NET developers. [http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/co/&amp;amp;toc=comp/mags/co/2005/01/r1toc.xml&amp;amp;DOI=10.1109/MC.2005.22] Although a [http://java-source.net/open-source/persistence plethora of ORM frameworks exist] for Java, among the most popular and widespread ORM layers today include Sun's [http://java.sun.com/jdo/ JDO] and the somewhat entrenched open source O/R mapping framework, [http://www.hibernate.org Hibernate].&lt;br /&gt;
&lt;br /&gt;
We begin with Java Data Objects (JDO), which by itself is not a framework, but a specification. The API is a standard interface-based Java model abstraction of persistence, developed under the auspices of the [http://jcp.org/ Java Community Process]. Frameworks like [http://db.apache.org/jdo/ Apache JDO] then implement this specification. JDO aims to provide implementations for not only relational databases, but also object databases, and file systems.&lt;br /&gt;
&lt;br /&gt;
Hibernate is another ORM implementation, and though it is open source, it is often considered &amp;quot;proprietary&amp;quot; because it does not directly implement the JDO specification or Java Community Process specifications. Still, Hibernate's momentum has resulted in it becoming a de facto standard in the Java industry, furthered by frameworks such as [http://www.springframework.org/ Spring] that use it as a building block.&lt;br /&gt;
&lt;br /&gt;
== ORM in Ruby on Rails ==&lt;br /&gt;
&lt;br /&gt;
Ruby on Rails is an interesting example of the use of ORM, which provides the [http://en.wikipedia.org/wiki/Active_record_pattern ActiveRecord] pattern implemented as [http://wiki.rubyonrails.org/rails/pages/ActiveRecord ActiveRecord in Rails].  In addition to mapping objects to table rows, and providing persistence in the traditional ORM sense, Ruby on Rails has language-level support for ORM with ActiveRecord.  Rails allows database-oriented web services to be configured and deployed with a minumum of development, featuring the classic ''Model'', ''View'', ''Controller'' (M-V-C) architecture.  In this context, ''Rails ActiveRecord'' implements the Model layer of the M-V-C architecture.&lt;br /&gt;
&lt;br /&gt;
== ORM in Microsoft .NET ==&lt;br /&gt;
Although ORM has achieved significant penetration of the Java world, there are now a variety of [http://en.wikipedia.org/wiki/Category:.Net_Object-relational_mapping_tools .NET implementations enabling ORM.]&lt;br /&gt;
&lt;br /&gt;
An obvious choice for those already aware of [http://en.wikipedia.org/wiki/Hibernate_(Java) Hibernate for Java], is the .NET port of ''Hibernate'' known as [http://www.hibernate.org/343.html NHibernate]. ''NHibernate'' supports a number of database platforms [http://www.hibernate.org/361.html] and permits developers to work in native .NET [http://www.hibernate.org/343.html], integrating Plain Old CLR Objects ([http://en.wikipedia.org/wiki/POCO POCOs]) data with the underlying database.  For a practical getting-started developer guide, read [http://www.developer.com/net/asp/article.php/3709346 Using NHibernate as an ORM Solution for .NET].&lt;br /&gt;
&lt;br /&gt;
== LINQ in Microsoft .NET ==&lt;br /&gt;
&lt;br /&gt;
As described previously, Microsoft's [http://msdn.microsoft.com/en-us/netframework/aa904594.aspx LINQ] provides ''language-integrated query''[http://msdn.microsoft.com/en-us/library/bb308959.aspx#linqoverview_topic1] to the .NET environment.  Supporting C# and Visual Basic, ''LINQ'' provides separate, optimized ''providers'' for access from the programming language level to relational data objects [http://msdn.microsoft.com/en-us/library/bb425822.aspx], XML documents[http://msdn.microsoft.com/en-us/library/bb308960.aspx], and SQL databases [http://msdn.microsoft.com/en-us/library/bb425822.aspx].&lt;br /&gt;
&lt;br /&gt;
== Dynamic SQL in PHP, ASP Classic, and JDBC ==&lt;br /&gt;
&lt;br /&gt;
Despite the availability of object-relational libraries, dynamic SQL continues to be a popular development mechanism for interfacing with databases. Dynamic SQL is not an object-oriented methodology, but rather a &amp;quot;bare metal&amp;quot; programming approach where SQL strings are directly constructed through concatenation or other low-level mechanisms and then directly passed to the database. The results of such queries are themselves lower level objects like record sets or hash tables.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
This article has introduced ORM from the user's perspective, motivating the discussion with the design patterns relevant to integrating a relational database to an object oriented application. We have learned the basic advantages of ORM and the techniques by which it is employed. In addition, we have seen examples of ORM usage in several implementations, and we have explored the various approaches to ORM in languages and environments as diverse as Java / Hibernate, and Microsoft LINQ.  In addition, we have compared the Efficiency and Programming Ease of the different implementations.  ORM has become ubiquitous as object technology development marches forward in concert with advances in networks and distributed architectures.&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
&lt;br /&gt;
This  section summarizes important links from the article for those wishing to quickly access the most practical ''ORM'' resources.&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Object-relational_mapping Wikipedia on ORM]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/ActiveRecord_(Rails) Wikipedia on Active Record in Rails]&lt;br /&gt;
* [http://www.agiledata.org/essays/mappingObjects.html Object Mapping Tutorial]&lt;br /&gt;
* [http://www.acmqueue.org/modules.php?name=Content&amp;amp;pa=printer_friendly&amp;amp;pid=538&amp;amp;page=1 The ACM on ORM]&lt;br /&gt;
* [http://digitalcommons.macalester.edu/context/mathcs_honors/article/1006/type/native/viewcontent/ Object Relational Mapping Tutorial]&lt;br /&gt;
* [http://www.rgoarchitects.com/Files/ormappin.pdf When / Why to use ORM]&lt;br /&gt;
* [http://www.sqlteam.com/article/stored-procedures-an-overview Stored Procedures Overview]&lt;br /&gt;
* [http://www.hibernate.org Hibernate]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/netframework/aa904594.aspx Microsoft on LINQ]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Language_Integrated_Query Wikipedia on LINQ]&lt;br /&gt;
* [http://www.hibernate.org/343.html NHibernate]&lt;/div&gt;</summary>
		<author><name>Marashid</name></author>
	</entry>
</feed>