The geometric increase in computer power and the ubiquitous availability of network connectivity are revolutionizing computing. A computer science curriculum that is based on old teaching techniques may seem dull and irrelevant to the modern student. Instruction in the undergraduate curriculum for the most part does not make active use of new technology. A multimedia presentation during a lecture by an instructor is considered to be a passive use of technology. In contrast, a student who can control a multimedia visualization is making active use of such technology. The difference between passive and active use of technology is similar to the difference between watching a laboratory demonstration and performing an experiment yourself. Aside from making the learning experience more interesting, a well designed experiment can challenge the student and encourage creativity. A well designed user-controlled animation can have a similar effect and provide the student with a virtual laboratory environment. Half of the curriculum for an undergraduate operating systems course has been redesigned by constructing a series of programming projects that enable students to experiment with concurrency and communication. Although the remainder of the curriculum in a traditional operating systems course does not easily lend itself to exploration using programming projects that can be completed by a student in a short period of time, this project designs a curriculum for this second part of operating systems and for computer networks that is based on having the students perform experiments in a virtual laboratory setting. The laboratory experiments use animated simulations written in the Java language, allowing them to be run on virtually any computer connected to the Internet. A framework for developing active animations is set up so that these animations can be efficiently produced. *