ROSE is an open source compiler infrastructure to build source-to-source program transformation and analysis tools for large-scale Fortran 77/95/2003, C, C++, OpenMP, and UPC applications. The intended users of ROSE could be either experienced compiler researchers or library and tool developers who may have minimal compiler experience.Like other compiler infrastructures, ROSE consists of front-ends, a midend, and backends, but ROSE backends generate (unparse) source code. Thus ROSE is a source-to-source compiler infrastructure. The intermediate representation (IR) used in ROSE is high level to build an abstract syntax tree (AST) that is well suited to source-to-source (so ROSE does not loose any information about the structure of the original source code). The midend contains an evolving set of analyzes and optimizations. The Edison Design Group (EDG) front-end is used to parse C and C++ applications. Although the EDG source code and interfaces are protected, they may be distributed freely in binary form. Language support for Fortran 2003 and earlier versions (including Fortran 90/95, F77, F66, and Fortran 4) is based on the Open Fortran Parser (OFP) developed at Los Alamos National Laboratory. ROSE converts the intermediate representations (IRs) produced by the front-ends into abstract syntax trees.A number of program analyzes and transformations have been developed for ROSE. They are designed to be utilized by users via simple function calls to interfaces. The program analysis available include call graph analysis, control flow analysis, data flow analysis (live variables, def-use chain, reaching definition, alias analysis, etc.), class hierarchy analysis, data dependence and system dependence analysis, and MPI communication pattern analysis. Representative program optimizations and translations developed with ROSE are partial redundancy elimination, constant folding, inlining, outlining (separating out a portion of code as a function), OpenMP directive lowering, automatic parallelization and loop transformations (a loop optimizer supporting aggressive loop optimizations such as fusion, fission, interchange, unrolling, and blocking).