A computer readable medium comprising instructions which, when executed by one or more hardware processors, cause performance of operations comprising: identifying a first non-module code in a system (101, 102), wherein the first non-module code does not correspond to any of a plurality of modules (104, 106, 108, 110, 112) of the system (101, 102), wherein non-module code (140, 142, 144, 146) refers to code in which dependencies between different pieces of code are not strictly declared or restricted, wherein a first module of the plurality of modules (104, 106, 108, 110, 112) indicates, via a declaration and/or a namespace such as a dependency path or a class loader, an explicit dependency on a second module of the plurality of modules (104, 106, 108, 110, 112), wherein modules of the plurality of modules (104, 106, 108, 110, 112) are restricted from explicitly depending on any non-module code (140, 142, 144, 146), wherein the first module is permitted to access an element of the second module based at least on (a) the explicit dependency and (b) a determination that the element of the second module is exposed to the first module; and generating a first bridge module for the first non-module code; wherein the generating operation comprises: defining a module descriptor that (a) corresponds to the first bridge module and (b) explicitly references a namespace such as a dependency path or a class loader, or includes a dependency path, thus indicating a dependency on one or more sets of non-module code (140, 142, 144, 146), wherein, after generating the first bridge module, the plurality of modules (104, 106, 108, 110, 112) are permitted to indicate explicit dependencies on the first bridge module. identifying a first non-module code in a system (101, 102), wherein the first non-module code does not correspond to any of a plurality of modules (104, 106, 108, 110, 112) of the system (101, 102), wherein non-module code (140, 142, 144, 146) refers to code in which dependencies between different pieces of code are not strictly declared or restricted, wherein a first module of the plurality of modules (104, 106, 108, 110, 112) indicates, via a declaration and/or a namespace such as a dependency path or a class loader, an explicit dependency on a second module of the plurality of modules (104, 106, 108, 110, 112), wherein modules of the plurality of modules (104, 106, 108, 110, 112) are restricted from explicitly depending on any non-module code (140, 142, 144, 146), wherein the first module is permitted to access an element of the second module based at least on (a) the explicit dependency and (b) a determination that the element of the second module is exposed to the first module; and generating a first bridge module for the first non-module code; wherein the generating operation comprises: defining a module descriptor that (a) corresponds to the first bridge module and (b) explicitly references a namespace such as a dependency path or a class loader, or includes a dependency path, thus indicating a dependency on one or more sets of non-module code (140, 142, 144, 146), wherein, after generating the first bridge module, the plurality of modules (104, 106, 108, 110, 112) are permitted to indicate explicit dependencies on the first bridge module.