Specification properties
| Property | Cfengine3 | Puppet | BMC Bladelogic Server Automation Suite | Chef | Netomata Config Generator | Microsoft Server Center Configuration Manager | CA Network and Systems Management | Bcfg2 | LCFG | HP Server Automation | IBM Tivoli System Automation for Multiplatforms |
| Specification paradigm | | | | | | | | | | | |
Language type | Declarative | Declarative, Imperative | Imperative | Imperative | Declarative, Imperative | Imperative | Declarative, Imperative | Declarative | Declarative | Imperative | Declarative |
User interface | Command line | GUI, Command line | GUI, Command line | GUI, Command line | Command line | GUI | GUI | Command line | Command line | GUI | GUI, Command line |
| Abstraction mechanisms | Configuration files, Implementation dependent instances, Instance configurations | Configuration files, Implementation dependent instances | Configuration files, Implementation dependent instances | Implementation dependent instances | Configuration files | Configuration files | Configuration files, Implementation dependent instances, Instance configurations | Configuration files | Implementation dependent instances | Configuration files | Implementation dependent instances |
| Modularization mechanisms | | | | | | | | | | | |
Type of grouping | Static grouping, Query based groups, Hierarchical groups | Static grouping, Query based groups, Hierarchical groups | Static grouping, Query based groups, Hierarchical groups | Static grouping, Query based groups | Static grouping | Static grouping, Query based groups | Hierarchical groups | Static grouping, Hierarchical groups | Static grouping, Query based groups | Static grouping | Static grouping |
Configuration modules | yes | yes | yes | yes | no | no | yes | no | yes | no | yes |
| Modelling of relations | | | | | | | | | | | |
Arity | many-to-many, one-to-many, one-to-one | one-to-many, one-to-one | one-to-one | many-to-many | one-to-one | | | | many-to-many, one-to-one | | many-to-many, one-to-many, one-to-one |
Constraints | generative constraints | | | | | | | | | | generative constraints |
Granularity | Instance relations, Parameter - instance relations, Parameter relations | Instance relations | Instance relations | Instance relations | Instance relations | | | | Instance relations, Parameter relations | | Instance relations, Parameter - instance relations, Parameter relations |
Deployment properties
| Property | Cfengine3 | Puppet | BMC Bladelogic Server Automation Suite | Chef | Netomata Config Generator | Microsoft Server Center Configuration Manager | CA Network and Systems Management | Bcfg2 | LCFG | HP Server Automation | IBM Tivoli System Automation for Multiplatforms |
| Scalability | > 10000 | 1000 - 10000 | > 10000 | unknown | unknown | unknown | unknown | < 1000 | 1000 - 10000 | unknown | unknown |
| Workflow | Coordination of distributed changes | Coordination of distributed changes | Coordination of distributed changes | | | Support for organisational policies | Support for organisational policies | | | Coordination of distributed changes | Coordination of distributed changes |
| Deployment architecture | | | | | | | | | | | |
Translation agent | Strongly distributed management | Centralized management | Weakly distributed management | Centralized management | Centralized management | Weakly distributed management | Weakly distributed management | Centralized management | Centralized management | Centralized management | Centralized management |
Distribution mechanism | Pull, Push | none, Pull, Push | Push | none, Pull, Push | none | Pull, Push | Push | Pull | Pull | Push | Push |
| Platform support | *BSD, AIX, HP-UX, Linux, Mac OS X, Solaris, Windows | *BSD, AIX, HP-UX, Linux, Mac OS X, Solaris | AIX, HP-UX, Linux, Network equipment, Solaris, Windows | *BSD, Linux, Mac OS X, Solaris, Windows | Network equipment | Windows | AIX, HP-UX, Linux, Mac OS X, Network equipment, Solaris, Windows | *BSD, AIX, Linux, Mac OS X, Solaris | Linux | AIX, HP-UX, Linux, Network equipment, Solaris, Windows | AIX, Linux, Solaris, Windows |
Specification management properties
| Property | Cfengine3 | Puppet | BMC Bladelogic Server Automation Suite | Chef | Netomata Config Generator | Microsoft Server Center Configuration Manager | CA Network and Systems Management | Bcfg2 | LCFG | HP Server Automation | IBM Tivoli System Automation for Multiplatforms |
| Usability | | | | | | | | | | | |
Ease of use | medium | medium | easy | hard | hard | easy | easy | hard | medium | easy | easy |
Support for testing specifications | dry run mode | dry run mode, integration of staging and testing | | integration of staging and testing | | | | dry run mode | dry run mode | | |
Monitoring the infrastructure | integrated monitoring | interaction with external monitoring | integrated monitoring | | interaction with external monitoring | integrated monitoring | integrated monitoring | integrated monitoring | integrated monitoring, interaction with external monitoring | integrated monitoring | integrated monitoring |
| Versioning support | external repository | external repository | external repository | external repository, integrated repository | external repository | integrated repository | integrated repository | external repository | external repository | | external repository |
| Specification documentation | structured documentation | free form documentation, structured documentation | free form documentation | free form documentation, structured documentation | free form documentation | | | free form documentation | free form documentation | free form documentation | free form documentation |
| Integration with environment | runtime characteristics | external databases, runtime characteristics | external databases | external databases, runtime characteristics | | external databases, runtime characteristics | runtime characteristics | runtime characteristics | runtime characteristics | | runtime characteristics |
| Conflict management | Modality conflicts | Modality conflicts | | | | | | Modality conflicts | | | |
| Workflow enforcement | no | no | yes | no | no | no | no | | no | no | no |
| Access control | Path based | Path based | Hierarchical | Path based | | Hierarchical | Hierarchical | Path based | Path based | Hierarchical | Hierarchical |
Support
| Property | Cfengine3 | Puppet | BMC Bladelogic Server Automation Suite | Chef | Netomata Config Generator | Microsoft Server Center Configuration Manager | CA Network and Systems Management | Bcfg2 | LCFG | HP Server Automation | IBM Tivoli System Automation for Multiplatforms |
| Available documentation | Process documentation, Reference, Tutorial | Process documentation, Reference, Tutorial | Process documentation, Reference, Tutorial | Reference, Tutorial | Reference, Tutorial | Process documentation, Reference, Tutorial | | Process documentation, Reference, Tutorial | Process documentation, Reference, Tutorial | | Process documentation, Reference, Tutorial |
| Commercial support | Training, Company backed development, Support lines | Training, Company backed development, Support lines | Training, Company backed development, Support lines | Training, Company backed development | Company backed development | Training, Company backed development, Support lines | Training, Company backed development, Support lines | | | Training, Company backed development, Support lines | Training, Company backed development, Support lines |
| Community | 5 | 5 | 1 | 4 | 1 | 4 | 3 | 2 | 1 | | 5 |
| Maturity | 5 | 3 | 5 | 2 | 1 | 3 | 5 | 4 | 5 | 5 | 4 |
x
We define the specification paradigm of a tool by answering two questions:
- Is the input language declarative or imperative?
- Does the tool use a GUI-based or command-line user interface?
x
Tools that use a declarative input language enable to express the desired state of the computer infrastructure. The runtime of the tool compares this desired state with the configuration on every managed device and derives a plan to move to the desired state. In the system configuration literature, this process is described as convergence. A system configuration tool that supports convergence has the additional benefit that divergences from the desired state are automatically corrected.
Tools that use an imperative input language distribute, schedule and deploy scripts written in its imperative input language on the managed devices. For an imperative script to work reliable, all possible states of the managed devices need to covered and checked in the script. Moreover, the system configuration tool must also keep track of what scripts are already executed on every device. An alternative is to make all the operations in the script idempotent.
Let us contrast the practical differences between an imperative and a declarative language. Suppose a system administrator does not want file /etc/hosts_deny to be present on a device.
In a declarative language, the system administrator must ensure that the file is not included in the model or explicitly define that the file must not exist.
In an imperative language, the system administrator must first write a test to verify if /etc/hosts_deny exists. If the file exists, another instruction is needed to remove the file. If the system administrator does not write the first test, the action fails if the file was already removed.
x
Orthogonal on the choice of declarative or imperative specification language is the choice of user interface: does the tool use a command-line or graphical user interface?
Command-line interfaces typically have a steeper learning curve than graphical approaches but, once mastered, can result in higher productivity. Command-line interfaces also have the advantage that they can be integrated with other tools through scripting. In contrast, system administrators are typically quicker up to speed with graphical approaches.
x
A successful configuration tool is able to make abstraction of the complexity and the heterogeneity that characterises IT infrastructures where hardware and software of several vendors and generations are used simultaneously. Making abstraction of complexity and heterogeneity is very similar to what general purpose programming languages have been doing for decades.
Abstraction from complexity is an important concept in programming paradigms such as object orientation. In object orientation, implementation details are encapsulated behind a clearly defined API. Encapsulation is a concept that is valuable for modeling configurations as well. Responsibilities and expertise in a team of operators are not defined on machine boundaries, but based on subsystems or services within the infrastructure, for example: DNS or the network layer. Encapsulation enables experts to model an aspect of the configuration and expose a well documented API to other operators.
Modern IT infrastructures are very heterogeneous environments. Multiple generations of software and hardware of several vendors are used in production at the same time. These heterogeneous items need to be configured to work together in one infrastructure.
Based on how a system configuration tool's language deals with complexity and heterogeneity, we define six levels to classify the tool. These levels range from high-level end-to-end requirements, to low-level bit-configurations.
- End-to-end requirements: End-to-end requirements are typical non-functional requirements. They describe service characteristics that the computing infrastructure must achieve. An example of a such an end-to-end requirements is a performance characteristic for a mail service:
Configure enough mail servers to guarantee an SMTP response time of X seconds
. Other types of end-to-end requirements deal with security, availability, reliability, usability, ...
- Instance distribution rules: Instance distribution rules specify the distribution of instances in the network. We define an instance as a unit of configuration specification that can be decomposed in a set of parameters. Examples of instances are mail servers, DNS clients, firewalls and web servers. A web server, for example, has parameters for expressing its port, virtual hosts and supported scripting languages. An example of an instance distribution rule is:
Configure N suitable machines as a mail server for this cluster
. This instance distribution rule prescribes the number of mail servers that need to be activated in an infrastructure.
- Instance configurations: At the level of instance configurations, each instance is an implementation independent representation of a configuration. An example of a tool at this level is Firmato. Firmato allows modeling firewall configurations independent from the implementation software used. An example of an instance configuration rule is:
Configure machines X, Y, Z as a mail server
.
- Implementation dependent instances: The level of implementation dependent instances specifies the required configuration in more detail. It describes the configuration specification in terms of the contents of software configuration files. An example of such a rule is
Put these lines in sendmail.cf on machines X, Y, Z
. Tools like LCFG and Puppet operate at the level of implementation dependent instances.
- Configuration files: At the level of configuration files, complete configuration files are mapped on a device or set of devices. In contrast with the previous level, this level has no knowledge of the contents of a configuration file. Many system configuration tools, like IBM Tivoli, Bcfg2, Cfengine3, and Bladelogic \cite{bladelogic} use this abstraction level.
- Bit-configurations: At the level of Bit-configurations, disk images or diffs between disk images are mapped to a device or set of devices. This is the lowest level of configuration specification. Bit-level specifications have no knowledge of the contents of configuration files or the files itself. Examples of tools that operate on this level are imaging systems like Partimage, g4u and Norton Ghost.
In the context of policy languages, the classification of policy languages at different levels of abstraction is often done by distinguishing between high-level and low-level policies. The distinction of what exactly is a high-level and low-level policy language is rather vague. In many cases, high-level policies are associated with the level that we call end-to-end requirements, while low-level policies are associated with the implementation dependent instances level. We believe that a classification tied to the context of system configuration gives a better insight in the different abstraction levels used by system configuration tools.
In conclusion, a system configuration tool automates the deployment of configuration specifications. At the level of bit-configurations, deployment is simply copying bit-sequences to disks, while deploying configurations specified as end-to-end requirements is a much more complex process.
x
One of the main reason system administrators want to automate the configuration of their devices is to avoid repetitive tasks. Repetitive tasks are not cost efficient. Moreover, they raise the chances of introducing errors. Repetitive tasks exist in a computer infrastructure because there are large parts of the configuration that are shared between a subset (or multiple overlapping subsets) of devices. For example, devices need the same DNS client configuration, authentication mechanism, shared file systems, ... A system configuration tool that supports the modularization of configuration chunks reduces repetition in the configuration specification.
x
In its most basic form, modularization is achieved through a grouping mechanism: a device A is declared to be a member of group X and as a consequence inherits all system configuration chunks associated with X. More advanced mechanisms include boolean logic to combine groups, automatic definition of groups based on environmental data of the target device and hierarchical groups.
x
An additional property of a modularization mechanism is whether it enables third parties to contribute partial configuration specifications. Third parties can be hardware and software vendors or consultancy firms. Operators can then model their infrastructure in function of the abstractions provided by the third-party modules and reuse the expertise or rely on support that a third party provides on their configuration modules.
x
One of the largest contributors to errors and downtime in infrastructures are wrong configurations due to human error. An error in a configuration is commonly caused by an inconsistent configuration. For example, a DNS service that has been moved to an other server or moving an entire infrastructure to a new IP range. Explicitly modeling relations that exist in the network helps keeping a configuration model consistent.
Modeling relations is a mechanism for minimizing redundancy in the configuration specification. When relations are made explicit, a tool can automatically change configurations that depend on each other. For example, when the location of a DNS server changes and the relation between the DNS server and clients is modeled in the configuration specification, a system configuration tool can automatically adapt the client configurations to use the new server. Again, modeling relations reduces the possibility of introducing errors in the configuration specification.
x
Relations can range from one-to-one to many-to-many relationships. A simple one-to-one relationship is a middleware platform depending on a language runtime. A many-to-many relationship is for example the relation between all DNS clients and DNS servers in a network. A system configuration tool can also provide support facilities to query and navigate relations in the system configuration specification. An example that motivates such facilities for navigating and querying relations involves an Internet service. For example, a webservice runs on a machine in the DMZ. This DMZ has a dedicated firewall that connects to the Internet through an edge router in the network. The webservice configuration has a relation to the host it is running on and a relation to the ``Internet''. The model also contains relations that represent all physical network connections. Using these relations, a firewall specification should be able to derive firewall rules for the webservice host, the DMZ router and the edge router.
x
An extra feature is the tool's ability to support the modeling of constraints on relations. We distinguish two types of constraints: validation constraints and generative constraints.
validation constraints are expressions that need to hold true for your configuration. Because of policy or technical factors, the set of allowable values for a relation can be limited. Constraints allow to express these limitations. Examples of such limitations are:
- a server can only serve 100 clients.
- clients can only use the DNS server that is available in their own subnet
- every server needs to be configured redundantly with a master and a slave server.
- generative constraints are expression that make not a 1-1 link between a chunk of specification and the device on which this specification needs to be applied. The tool itself has the freedom to decide on which device the specification needs to be enforced. For example: one of the machines in this set of machines needs to be a mail server.
x
We define an instance as a unit of configuration specification that can be decomposed in a set of parameters. Examples of instances are mail servers, DNS clients, firewalls and web servers. A web server, for example, has parameters for expressing its port, virtual hosts and supported scripting languages. Based on this definition, we can classify relations in three categories:
- Instance relations represent a coarse grained dependency between instances. Instance dependencies can exist between instances on the same device, or between instances on different devices.
An example of the former is the dependency between a DNS server instance and the startup system instance on a device: if a startup system instance is not present on a device, the DNS server instance will not work. An example of dependencies between instances on different devices is the dependency between DNS servers and their clients.
- Parameter relations represent a dependency between parameters of instances. An example of this is a CNAME record in the DNS system: every CNAME record also needs an A record.
- Parameter - instance relations are used to express a relation between an individual parameter and an instance. For example a mail server depends on the existence of an MX record in the DNS server.
Note that it depends on the abstraction level of a tool which dependencies it can support. The two lowest abstraction layers, configuration files and bit-configurations, have no knowledge of parameters and as a consequence, they can only model instance dependencies.
x
Large infrastructures are subject to constant change in their configuration. System configuration tools must deal with these changes and be able to quickly enforce the configuration specification, even for large infrastructures with thousands of nodes, ten thousands of relations and millions of parameters.
Large infrastructures typically get more benefit of using a higher level specification. However, the higher-level the specification, the more processing power is needed to translate this high level specification to enforceable specifications on all managed devices. System configuration tools must find very efficient algorithms to deal with this problem or restrict the expressiveness of the system configuration tool.
x
Workflow management deals with planning and execution of (composite) changes in a configuration specification. Changes can affect services distributed over multiple machines and with dependencies on other services.
One aspect of workflow management is state transfer. The behavior of a service is not only driven by its configuration specification, but also by the data it uses. In the case of a mail server, the data are the mail spool and mailboxes, while web pages serve as data for a web server. When upgrading a service or transferring a service to another device, one has to take care that the state (collection of data) remains consistent in the face of changes.
Another aspect of workflow management is the coordination of distributed changes. This has to be done very carefully as not to disrupt operations of the computing infrastructure. A change affecting multiple machines and services has to be executed as a single transaction. For example, when moving a DNS server from one device to another, one has to first activate the new server and make sure that all clients use the new server before deactivating the old server. For some services, characteristics of the managed protocol can be taken into account to make this process easier. For example, the SMTP protocol retries for a finite span of time to deliver a mail when the first attempt fails. A workflow management protocol can take advantage of this characteristic by allowing the mail server to be unreachable during the change.
A last aspect of workflow management is non-technical: if the organizational policy is to use maintenance windows for critical devices, the tool must understand that changes to these critical devices can influence the planning and execution of changes on other devices.
x
In a typical setup of a system configuration tool, the tool starts from a central specification for all managed devices. Next, it (optionally) processes this specification to device profiles and distributes these profiles (or the full specification) to every managed device. An agent running on the device then enforce the device's profile. For the rest of this section, we define the processing step from a central specification to device profiles as the translation agent. The agent running on every device is defined as the deployment agent.
Possible approaches for the architecture of the translation agent can be classified in three categories, based on the number of translation agents compared to the number of managed devices: centralized management, weakly distributed management and strongly distributed management.
- centralized management is the central server approach with only one translation agent. When dealing with huge networks, the central server quickly becomes a bottleneck. This is certainly the case when a system configuration tool uses a high-level abstraction, as the algorithm for computing a device's configuration will become complex.
- weakly distributed management is an approach where multiple translation agents are present in the network. This approach can be realized for many centralized management tools by replicating the server and providing a shared policy repository for all servers. Another possible realization of this approach is organizing translation agents hierarchically.
- strongly distributed management systems use a separate translation agent for each managed device. The difficulty with this approach is enforcing inter-device relations because each device is responsible for translating its own configuration specification. As a consequence, devices need to cooperate with each other to ensure consistency.
x
In all approaches, each managed device contains a deployment agent that can be push or pull based. In the case of a pull based mechanism, the deployment agent needs to contact the translation agent to fetch the translated configurations. In a push based mechanism, the translation agent contacts the deployment agent. Deployment agents also have to be authenticated and their capabilities for fetching policies or configurations have to be limited. Configurations often contain sensitive information like passwords or keys and exposing this information to all deployment agents introduces a security risk.
x
Modern infrastructures contain a variety of computing platforms: Windows/Unix/Mac OS X servers, but also desktop machines, laptops, handhelds, smartphones and network equipment. Even in relatively homogeneous environments, we can not assume that all devices run the same operating system: operating systems running on network equipment are fundamentally different than those running on servers/desktops and smartphones are yet another category of operating systems.
Good platform support or interaction with other tools is essential for reducing duplication in the configuration specification. Indeed, many relations exist between devices running different operating systems. For example: a server running Unix and a router/firewall running Cisco IOS. If different tools are used to manage the server and router, relations between the router and server need to be duplicated in both tools which in turn introduces consistency problems if one of the relations changes. An example of such a relation is the the firewall rule on a Cisco router that opens port 25 and the SMTP service on a Unix server.
x
The target audience of a system configuration tool are system administrators. The language of the system configuration tool should be powerful enough to replace their existing tools, which are mostly custom tools. But it should also be easy enough to use, so the average system administrator is able to use it. Good system administrators with a good education are already scarce, so a system configuration tool should not require even higher education.
x
To understand the impact of a change in the specification, the system configuration tool can provide support for testing specifications through something as trivial as a dry-run mode or more complex mechanisms like the possibility to replicate parts of the production infrastructure in a (virtualized) testing infrastructure and testing the changes in that testing infrastructure first.
x
A system configuration tool can provide an integrated (graphical) monitoring system and/or define a (language-based) interface for other tools to check the state of an infrastructure. A language-based interface has the advantage that multiple monitoring systems can be connected with the system configuration tool. A monitoring system enables the user to check the current state of the infrastructure and the delta with the configuration specification.
x
Some system configuration tools store their specification in text files. For those tools, a system configuration specification is essentially code. As a consequence, the same reasoning to use a version control system for source code applies. It enables developers and operators to document their changes and track them through history. In a configuration model this configuration history can also be used to rollback configuration changes and it makes sure an audit trail of changes exists.
The system configuration tool can opt to implement versioning of configuration specification using a custom mechanism or, when the specification is in text files, reuse an external version control system and make use of the hooks most generic version control systems provide.
x
Usability studies show that a lot of time of an operator is spent on communication with other operators. These studies also show that a lot of time is lost because of miscommunications, where discussions and solutions are based on wrong assumptions. A system configuration tool that supports structured documentation can generate documentation from the system configuration specification itself and thus remove the need to keep the documentation in sync with the real specification.
x
The infrastructure that is managed by the system configuration tool is not an island: it is connected to other networks, is in constant use and requires data from other sources than the system configuration specification to operate correctly. As a consequence, a system administrator may need information from external databases in its configuration specification (think LDAP for users/groups) or information about the run-time characteristics of the managed nodes. A system configuration tool that leverages on these existing sources of information integrates better with the environment in which it is operating because it does not require all existing information to be duplicated in the tool.
x
A configuration specification can contain conflicting definitions, so a system configuration tool should have a mechanism to deal with conflicts. Despite the presence of modularization mechanisms and relations modeling, a configuration specification can still contain errors, because it is written by a human. In case of such an error, a conflict is generated. We distinguish two types of conflicts: application specific conflicts and contradictions in the configuration specification, also called modality conflicts.
- application specific conflicts: An example of an application specific conflict is the specification of two Internet services that use the same TCP port. The use of constraints makes support for dealing with application specific conflicts invaluable.
- modality conflicts: An example of a modality conflict is the prohibition and obligation to enable an instance (for example a mail server) on a device.
When a configuration specification contains rules that cause a conflict, this conflict should be detected and acted upon.
x
In most infrastructures a change to the configuration will never be deployed directly on the infrastructure. A policy describes which steps each update need to go through before it can be deployed on the production infrastructure. These steps can include testing on a development infrastructure, going through Q and A, review by a security specialist, testing on a exact copy of the infrastructure and so on. Exceptions on such policies can exist because not every update can go through all stages, updates can be so urgent that they need to be allowed immediately, but only with approval of two senior managers. A system configuration tool that provides support for modeling these existing workflows can adapt itself to the habits and processes of the system administrators and will thus be easier to use than system configuration tools without this support.
x
If an infrastructure is configured and managed based on a system configuration specification, control of this specification implies control of the full infrastructure. So it might be necessary to restrict access to the configuration specification. This is a challenge, especially in large infrastructures where a lot of operators with different responsibilities need to make changes to this specification. A lot of these large infrastructures are also federated infrastructures, so one specification can be managed from different administrative domains.
Authenticating and authorizing system administrators before they are making changes to the system configuration can prevent a junior system administrator who is only responsible for the logging infrastructure to make changes to other critical software running on the managed devices.
Many version control systems can enforce access control but the level on which the authorisation rules are expressed differs from the abstraction level of the
specification itself. In most systems, this is based on the path of the
file that contains the code or specification. But in most programming
languages and system configuration tools, the relation between the
name of the file and the contents of the file is very limited or even
non-existing. For example an authorisation rule could express that users of the
logging group should only set parameters of object from types in the
logging namespace. With path-based access control this becomes: users of group logging should only access files in
the /config/logging directory. The latter assumes that every system administrator uses the correct files to store configuration specifications. A third type of access control (hierarchical) arranges the different resources of the configuration in an object-tree and enables to specify access controls on this tree.
x
To quickly gain users, tools have to make their barriers to entry as low as possible. A ten minutes tutorial is often invaluable to achieve this. When users get more comfortable with the tool, they need extensive reference documentation that describes all aspects of the tool in detail alongside documentation that uses a more process-oriented approach covering the most frequent use cases.
Thus, documentation is an important factor in the adoption process of a tool.
x
Studies show that the need for commercial support varies amongst users. Unix users don't call support lines as often as their Window-colleagues. The same holds true for training opportunities. In all cases, the fact that there is a company actively developing and supporting a tool helps to gain trust amongst system administrators and thus increases adoption.
x
In our online society, community building is integral part of every product or service. Forums, wiki's and social networks can provide an invaluable source of information that complements the official documentation of a tool and introduces system administrators to other users of their preferred tool.
x
Some organizations prefer new features above stability, and others value stability higher than new features Therefore, it is important to know what the maturity of the tool is: Is it a new tool with some cutting edge features and frequent syntax changes in its language or a well-established tool with infrequent updates?