ENVY/Manager Frequently Asked Questions

Copyright 1994 Vikas Malik

All Rights Reserved

This FAQ may be posted to any USENET newsgroup, on-line service, or BBS as long as it is posted in its entirety and includes this copyright statement.

This FAQ may not be distributed for financial gain.

This FAQ may not be included in commercial collections or compilations without express permission from the author.


Vikas Malik - vmalik@ipass.net

Knowledge Systems Corporation



Q. What is ENVY/Manager?
Ans. ENVY/Manager is a software engineering environment that provides the services like configuration, history and change management required for development and maintenance of large software systems. ENVY is based on "What you saved is what you get" paradigm.

Q. What are the different software components of ENVY?
Ans. Methods, classes, class extensions, applications, subapplications and configuration maps are various software components of ENVY.

Q. What are the various stages a software component goes through during its development life cycle in ENVY?
Ans. A software component progresses through stages, from edition to version to release.

Q. What is the difference between an edition and version of a software component in ENVY?
Ans. An edition is a component that is open for change. An edition represents work-in-progress. Declaring an edition to be a version disables changes. A version is simply immutable edition.

Q. What do I mean by the release of a software component in ENVY?
Ans. Releasing a version of a component to its containing component makes that version the one that is part of the configuration and at which point those who load the containing component get the new part.

Q. What do I mean by the term configuration in ENVY?
Ans. The configuration describes, for a given component edition, the versions and editions of the components referred to by that edition.

Q. What are the different system components of ENVY?
Ans. 1. Library is the multi-user repository which contains the software components developed by the users.

2. Users

Q. What is an Application?
Ans. An Application is a collection of classes that together serve some useful purpose.

Q. What is a Subapplication?
Ans. A SubApplication is an application that is a part of another application. Subapplications are used to isolate platform dependencies and to organize classes within a large application. SubApplications may themselves contain SubApplications.

Q. What is the difference between an application and a subapplication?
Ans. An Application has prerequisites and whereas a SubApplication is not allowed to specify prerequisites.

Q. What is a class extension?
Ans. A class can be extended in a separate application or subapplication by adding new methods to a previously defined class.

Q. What is the difference between a class and a class extension?
Ans. Classes include the class definition and class comment, while the class extensions include only methods.

Q. What are the different types of relationships between software components?
Ans. 1. Parts relationship
2. Contains relationship
3. Prerequisite relationship

Q. What is the difference between a parts and a contains relationship?
Ans. In a parts relationship, the enclosed component can be part of other objects whereas in a contains relationship, the enclosed component cannot exist outside of the enclosing component. For example, an application can be part of several configuration maps whereas a method is said to be contained by a class.

Q. What are prerequisites?
Ans. Prerequisites must exist in a system before a dependent component can be allowed. An application defines prerequisite applications, indicating that the prerequisite applications are required by the application before it can function.

Q. What are the prerequisite applications for Kernel application?
Ans. None.

Q. Can subapplications have prerequisites?
Ans. No, the root application of a subapplication specifies the necessary prerequisites.

Q. Can I define a class with the same name in two applications?
Ans. Two applications in the same library can define classes with the same name, but those two applications would not be able to coexist in the same image. Each class in an image is defined in one and only one application.

Q. Can a subapplication be a part of more than one application?
Ans. Yes, a subapplication may be part of several applications but these applications cannot coexist in the same image.

Q. Can I extend or subclass a class that is not visible?
Ans. No.

Q. What are visible classes?
Ans. Visible classes are those classes that are defined by an application, one of its subapplications or one of its prerequisites.

Q. What is a private class?
Ans. A private class cannot be referenced, subclassed or extended from outside of its application.

Q. How do I make a class private?
Ans. By sending #private message to aClass.

 	aClass private. 
Q. What is a private method?
Ans. Private method should not be called outside of its inheritance hierarchy.

Q. Does ENVY prevents the illegal use of private methods?
Ans. No.

Q. Can I change a version of a software component?
Ans. No, a version is immutable. Modifications can be made to component editions only.

Q. What is a scratch edition?
Ans. A scratch edition allows the modification of an existing application version in a user's image. However, no changes can be made to the application version's state in the library. Scratch editions prevent the unnecessary creation of an application edition by the application manager.

Q. Can I release a class in a scratch edition of an application?
Ans. No.

Q. How do I scratch an application programatically?
Ans. AnApplication asScratch.

Q. What is a Configuration Map?
Ans. A Configuration Map is a named collection of applications. An application may be part of any number of configuration maps. A configuration map is "one button" way to load a group of applications. Most teams use a configuration map to periodically rebuild their image, bringing in the latest integrated and tested versions of all their applications.

Q. Is loading a software component in ENVY an atomic operation?
Ans. Yes, loading a component is atomic. The image is never left in an inconsistent state - loading either succeeds completely or fails completely.

Q. What is the difference between class owner and class developer?
Ans. Class owner is the only user authorized to release a class version to its containing application & delete it from an application. Class developer can create editions of the class, make changes and version the result.

Q. Can I version an application edition that has an open edition of a class?
Ans. No, a component that has parts or contains other components can only be versioned if all the subcomponents are themselves versions.

Q. Can I create a new edition of a class in a versioned application?
Ans. No, if a component has been versioned, none of the components that it contains may be made into editions without first making it an edition. Before making an edition of a class, the application that contains it must be an edition.

Q. Can I release an edition of a subapplication in an application edition?
Ans. Yes.

Q. Can I release an edition of a class in the containing application edition?
Ans. No, classes may only be released to their containing application after being versioned.

Q. Can the class developer release a class to its containing application?
Ans. No, the class owner is the only user authorized to release the class to its containing application.

Q. Can the subapplication manager release his subapplication to its enclosing application?
Ans. No, the manager of the enclosing application is the only user authorized to release a subapplication. The subapplication may be either a version or an edition.

Q. Can the application manager release his application in a configuration map?
Ans. No, only the manager of the configuration map edition may release applications to it. The application may either an edition or a version.

Q. What do I mean by cloning the ENVY library?
Ans. Cloning a library exports all the versioned configuration maps and applications to another library. In other words, all versioned configuration maps, their applications, subapplications and classes are copied to new library. Cloning removes purged components from the library and typically shrinks the library size by 50%. Only the library supervisor is allowed to clone the library.

Q. What do I mean by purging of a component?
Ans. Purging a component instructs ENVY that the component is no longer of interest to the user and should be omitted from the user interface. Purging a component does not free up the disk space occupied by that component.

Q. What do I mean by salvaging a component?
Ans. Salvaging retrieves a purged component and makes it available in the user interface.

Q. What is the #loaded method used for in ENVY?
Ans. The #loaded method is implemented by an application to initialize its classes or variables each time it is loaded. The #loaded message is sent to an application after it has been loaded or reloaded.

For example:
	ApplicationPorsche class>>#loaded
		Porsche911 initialize.
		PorscheBoxster initialize
Q. What is the #removing method used for?
Ans. The #removing method is implemented by an application to eliminate specific instances of its classes contained in class, shared or global variables, prior to unloading the application.

Q. What is the #failedRemove method used for?
Ans. The #failedRemove method is implemented by any application which defines a #removing method to counteract anything done in #removing method.

Q. What are Application lineups?
Ans. Application lineups specify different configurations of application prerequisites and subapplications for different platforms or conditions. Each platform or condition is specified by a Configuration expression which evaluates to a boolean.

For example, application Swapper has the following lineups for its prerequisites and subapplications.

	System vmType = 'WIN'	FileSystem R1.0
	System vmType = 'st80'	FileSystem R1.0

	System vmType = 'WIN'	SwapperCrossloadingToSTV R3.50
				SwapperSTV R3.50
	System vmType = 'st80'	SwapperCrossloadToST80 R3.50
				SwapperST80 R3.50
Q. What do I mean by ENVY baselining process?
Ans. A baseline provides a snapshot of the methods, classes and applications that are part of the system at a specific point during development. ENVY baselines control versions of software released to external entities and to synchronize Classes, Applications and Configurations between developers so that the most up-to-date versions of these are readily available to the entire development team.