. .. Coccinelle, 64 6.2.1 A tool to automatically rewrite the kernel

, Mapping to our proposition

, Example of Overlapping Applications of Semantic Patches, p.67

. .. , 70 6.5.1 State of practice (apply) does not provide guarantees, vol.73

, Conclusion : Overcoming Challenge C1

. .. , 76 7.2.1 Context: Power-Consuming Practises in Android Applications, p.79, 20196-07.

, Overlapping of Energy Anti-patterns in Android Applications 81 7.2.5.1 Overlapping Anti-patterns

. .. Docker, , vol.86

. .. , 89 7.3.3 Validation: Issues and Overlaps

.. .. Conclusion,

C. .. Overcoming,

. .. Conclusion, 2.2 Characterize black-box composition operators

, 2.4 Using algebraic properties to optimize a composition equation

, RUN Exec form: RUN commands have two syntaxes, one with brackets and one without. Interpretation of arguments differ from the two syntaxes. The one with brackets must be used

, Docker allows only a single service to be specified, therefore multiple CMD are useless since only the last one will be run

, Provides default to CMD: One has to provide default parameter via CMD to start a service. If an EntryPoint command is specified, CMD and EntryPoint commands should be specified in JSON format

, Variables in exec form of CMD: Variables used in CMD commands in its exec form are not interpreted, CMD

, Merge LABEL commands: When possible, merge labels commands

, Avoid apt-get upgrade: You should avoid RUN apt-get upgrade or distupgrade, as many of the "essential" packages from the base images will not upgrade inside an unprivileged container

, Combine install with update: Always combine RUN apt-get update with apt-get install in the same RUN statement. Ommiting this can lead to unexpected behaviour since apt-get update can be not run

, Packages, version pinning: Always fully specify the version of the package to install

, FROM

, CMD exec form: CMD commands have two syntaxes, one with brackets and one without. Interpretation of arguments differ from the two syntaxes. The one with brackets must be used if parameters are specified

, Prefer COPY: Although ADD and COPY are functionally similar, generally speaking

. Appendix-a, ADD <http> discouraged: Because image size matters, using ADD to fetch packages from remote URLs is strongly discouraged

, User root discouraged: You should avoid installing or using sudo since it has unpredictable. TTY and signal-forwarding behavior that can cause more problems than it solves

, As few USER commands as possible: To reduce layers and complexity, avoid switching USER back and forth frequently

, WORKDIR must have absolute path: For clarity and reliability, you should always use absolute paths for your WORKDIR

, Sort installation alphanumerically: Installation of multiple softwares must be written in alphanumerical order

, Add -no-install-recommend: Add -no-install-recommend when installing with apt-get, this will avoid installation not explicitly specified

J. D. Cook, LEGO blocks and organ transplants, 2011.

«. Iso/iec/ieee, Systems and software engineering -Vocabulary », International Organization for Standardization, 2017.

B. Benni, S. Mosser, N. Moha, and M. Riveill, « A delta-oriented approach to support the safe reuse of black-box code rewriters », Journal of Software: Evolution and Process, vol.31, issue.8, 2019.

B. Benni, S. Mosser, P. Collet, and M. Riveill, « Supporting Micro-services Deployment in a Safer Way: a Static Analysis and Automated Rewriting Approach, Symposium on applied Computing, 2018.

B. Benni, S. Mosser, N. Moha, and M. Riveill, « A Delta-oriented Approach to Support the Safe Reuse of Black-box Code Rewriters, 17th International Conference on Software Reuse (ICSR'18), 2018.

B. Benni, P. Collet, G. Molines, S. Mosser, and A. Pinna-déry, First international workshop on software engineering aspects of continuous development and new paradigms of software production and deployment, LASER foundation, 2018.

H. D. Mills, , 1986.

L. Northrop, P. Feiler, R. P. Gabriel, J. Goodenough, R. Linger et al., « Ultra-large-scale systems: The software challenge of the future, 2006.

E. W. Dijkstra, « On the role of scientific thought, Selected writings on computing: a personal perspective, vol.106, pp.60-66, 1982.

J. Rumbaugh, I. Jacobson, and G. Booch, Unified Modeling Language Reference Manual, The, p.321245628, 2004.

A. Zito, Z. Diskin, and J. Dingel, « Package merge in uml 2: Practice vs. theory?, International Conference on Model Driven Engineering Languages and Systems, pp.185-199, 2006.

M. J. Rochkind, « The source code control system, IEEE transactions on Software Engineering, issue.4, pp.364-370, 1975.

D. L. Parnas, On the criteria to be used in decomposing systems into modules, Communications of the ACM, vol.15, issue.12, pp.1053-1058, 1972.

, « Software engineering or methods for the multi-person construction of multi-version programs, IBM Germany Scientific Symposium Series, pp.225-235, 1974.

G. Kiczales, E. Hilsdale, J. Hugunin, M. Kersten, J. Palm et al., Griswold, « An overview of AspectJ, European Conference on Object-Oriented Programming, pp.327-354, 2001.

C. Cecchinel, « DEPOSIT : an approach to model and deploy data collection policies on heterogeneous and shared sensor networks, 2017.

J. C. Martin, Introduction to Languages and the Theory of Computation, McGraw-Hill NY, vol.4, 1991.

M. Sipser, Introduction to the Theory of Computation, Thomson Course Technology Boston, vol.2, 2006.

J. Berstel, L. Boasson, O. Carton, and I. Fagnot, Minimization of Automata, 2010.
URL : https://hal.archives-ouvertes.fr/hal-01743468

, DFA minimization, 2019.

. Docker, Docker Official website, 2019.

, Docker Official Numbers, 2019.

. Git, Git Official Numbers, 2019.

. Venturebeat, Github Passes 100M Repositories, 2018.

. Github, Github, State of the Octoverse, 2019.

, 2017 Linux Kernel Report Highlights Developers' Roles and Accelerating Pace of Change, 2017.

L. Torvald, Linux Official Repository, 2019.

T. Lee, Android Now Has 2 Billion Monthly Active Users, 2017.

D. Bohn, ANDROID AT 10: THE WORLD'S MOST DOMINANT TECHNOLOGY, 2018.

G. Hecht, O. Benomar, R. Rouvoy, N. Moha, and L. Duchien, 2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE), pp.236-247, 2015.

R. Pawlak, C. Noguera, N. Petitprez, and . Spoon, Program Analysis and Transformation in Java », Inria, 2006.

M. Acher, P. Collet, P. Lahire, and R. France, « Composing Feature Models », in Software Language Engineering, pp.62-81, 2010.

L. C. Megginson, Lessons from Europe for American business, pp.3-13, 1963.

I. Kurtev, « State of the art of QVT: A model transformation language standard, International Symposium on Applications of Graph Transformations with Industrial Relevance, pp.377-393, 2007.

O. Mofm2t and «. Omg-mof, Model to Text Transformation Language (OMG MOFM2T) Version 1.0 », Object Management Group, 2008.

F. Jouault, F. Allilaire, J. Bézivin, I. Kurtev, P. Valduriez et al., Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, pp.719-720, 2006.

G. Csertan, G. Huszerl, I. Majzik, Z. Pap, A. Pataricza et al., ATRA -visual automated transformations for formal verification and validation of UML models, Proceedings 17th IEEE International Conference on Automated Software Engineering, pp.267-270, 2002.

M. Lawley and J. Steel, « Practical declarative model transformation with Tefkat, International Conference on Model Driven Engineering Languages and Systems, pp.139-150, 2005.

G. Mussbacher, D. Amyot, J. Araújo, and A. Moreira, « Requirements modeling with the aspect-oriented user requirements notation (AoURN): a case study, Transactions on aspect-oriented software development VII, pp.23-68, 2010.

J. Klein, L. Hélouët, and J. Jézéquel, « Semantic-based weaving of scenarios, Proceedings of the 5th International Conference on Aspect-Oriented Software Development, R. E. Filman, pp.27-38, 2006.

E. Merks, R. Eliersick, T. Grose, F. Budinsky, and D. Steinberg, « The eclipse modeling framework », retrieved from, total, p.37, 2003.

F. Fleurey, R. Reddy, R. France, B. Baudry, S. Ghosh et al., Kompose: a generic model composition tool, 2005.

A. Jackson, J. Klein, B. Baudry, and S. Clarke, « Executable Aspect Oriented Models for Improved Model Testing, ECMDA workshop on Integration of Model Driven Development and Model Driven Testing, 2006.

E. Baniassad and S. Clarke, « Theme: an approach for aspect-oriented analysis and design, Proceedings. 26th International Conference on Software Engineering, pp.158-167, 2004.

D. Kolovos, R. Paige, and F. Polack, « Merging Models with the Epsilon Merging Language (EML), vol.4199, pp.215-229, 2006.

M. Schöttle, O. Alam, J. Kienzle, and G. Mussbacher, « On the modularization provided by concern-oriented reuse, 2016.

B. Morin, J. Klein, O. Barais, and J. Jézéquel, Generic Weaver for Supporting Product Lines, International Workshop on Early Aspects at ICSE'08, 2008.
URL : https://hal.archives-ouvertes.fr/inria-00456485

M. Kramer, J. Klein, J. Steel, B. Morin, J. Kienzle et al., « On the formalisation of GeKo: A generic aspect models weaver, 2012.

J. Whittle, P. Jayaraman, and «. Mata, A Tool for Aspect-Oriented Modeling Based on Graph Transformation, Models in Software Engineering, pp.978-981, 2008.

B. Morin, O. Barais, J. Jézéquel, F. Fleurey, and A. Solberg, « Mod-els@runtime to support dynamic adaptation, Computer, vol.42, issue.10, pp.44-51, 2009.

P. Sriplakich, X. Blanc, M. Gervais, and . Collaborative, Software Engineering on Large-scale models: Requirements and Experience in Mod-elBus, 23rd Annual ACM Symposium on Applied Computing (SAC'08), pp.674-681, 2008.

R. Pawlak, M. Monperrus, N. Petitprez, C. Noguera, L. Seinturier et al., A library for implementing analyses and transformations of Java source code, Software: Practice and Experience, vol.46, pp.1155-1179, 2016.
URL : https://hal.archives-ouvertes.fr/hal-01078532

L. R. Rodriguez and J. Lawall, « Increasing Automation in the Backporting of Linux Drivers Using Coccinelle », ser. 11th European Dependable Computing Conference -Dependability in Practice, 2015.

V. Matena, B. Stearns, and L. Demichiel, Applying Enterprise JavaBeans: Component-Based Development for the J2EE Platform, p.201914662, 2003.

R. Pawlak, L. Seinturier, L. Duchien, G. Florin, and «. Jac, A Flexible and Efficient Framework for AOP in Java, Reflection, The Third International Conference on Metalevel Architectures and Separation of Crosscuting Concerns, 2001.
URL : https://hal.archives-ouvertes.fr/hal-01124645

, ). 2to3 -Automated Python 2 to 3 code translation, 2019.

F. Santacroce, Git Essentials: Create, merge, and distribute code with Git, the most powerful and flexible versioning system available, 2017.

V. Berzins, « Software merge: Models and methods for combining changes to programs, pp.978-981, 1991.

V. Berzins and D. A. Dampier, « Software merge: Combining changes to decompositions », Journal of Systems Integration, vol.6, issue.1, pp.1573-8787, 1996.

S. Mimram and C. D. Giusto, A Categorical Theory of Patches, 2013.
URL : https://hal.archives-ouvertes.fr/hal-00904156

R. M. Stallman, Z. Weinberg, C. The, and . Preprocessor, Free Software Foundation, 1987.

M. D. Ernst, G. J. Badros, and D. Notkin, « An empirical analysis of C preprocessor use, IEEE Transactions on Software Engineering, vol.28, issue.12, pp.1146-1170, 2002.

E. W. Dijkstra, Notes on structured programming, 1970.

F. Baader and T. Nipkow, Term rewriting and all that, 1999.

J. W. Klop and J. Klop, Term rewriting systems. Centrum voor Wiskunde en Informatica, 1990.

P. Mishra and U. S. Reddy, « Declaration-free Type Checking, Proceedings of the 12th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages, ser. POPL '85, pp.7-21, 1985.

,

T. Schrijvers, S. P. Jones, M. Chakravarty, and M. Sulzmann, Type Checking with Open Type Functions, vol.43, pp.362-1340, 2008.

,

M. G. Van-den-brand, P. Klint, and J. J. Vinju, « Term Rewriting with Traversal Functions, ACM Trans. Softw. Eng. Methodol, vol.12, issue.2, pp.152-190, 2003.

G. Huet, Conflunt reductions: Abstract properties and applications to term rewriting systems, pp.30-45, 1977.

T. Aoto, J. Yoshida, and Y. Toyama, « Proving Confluence of Term Rewriting Systems Automatically, Rewriting Techniques and Applications, R. Treinen, pp.93-102, 2009.

J. Giesl, R. Thiemann, P. Schneider-kamp, and S. Falke, « Automated Termination Proofs with AProVE, Rewriting Techniques and Applications, pp.210-220, 2004.

N. Dershowitz, J. Jouannaud, . V. Chapter-;-j, and E. Leeuwen, -Rewrite Systems », in Formal Models and Semantics, ser. Handbook of Theoretical Computer Science, pp.243-320, 1990.

T. Arts and J. Giesl, « Termination of term rewriting using dependency pairs, Theoretical Computer Science, vol.236, issue.1, pp.304-3975, 2000.

C. S. Lee, N. D. Jones, and A. M. Ben-amram, Proceedings of the 28th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp.81-92, 2001.

Y. Padioleau, J. Lawall, R. R. Hansen, G. Muller, and . Oper, « Documenting and Automating Collateral Evolutions in Linux Device Drivers

, Syst. Rev, vol.42, issue.4, pp.247-260, 2008.

G. Sittampalam, « Some properties of darcs patch theory, 2005.

J. Dagit, « Type-correct changes-a safe approach to version control implementation, 2009.

X. Blanc, I. Mounier, A. Mougenot, and T. Mens, « Detecting model inconsistency through operation-based model construction, 2008 ACM/IEEE 30th International Conference on Software Engineering, pp.511-520, 2008.

Y. Padioleau, J. L. Lawall, and G. Muller, « Understanding Collateral Evolution in Linux Device Drivers, SIGOPS Oper. Syst. Rev, vol.40, issue.4, pp.163-5980, 2006.

A. Noureddine, A. Bourdon, R. Rouvoy, and L. Seinturier, ASE -The 27th IEEE/ACM International Conference on Automated Software Engineering -2012, pp.160-169, 2012.

A. Noureddine, R. Rouvoy, and L. Seinturier, « Monitoring Energy Hotspots in Software », Journal of Automated Software Engineering, vol.22, issue.3, pp.291-332, 2015.

A. Bourdon, A. Noureddine, R. Rouvoy, L. Seinturier, and . Powerapi, A Software Library to Monitor the Energy Consumed at the Process-Level, ERCIM News, Special Theme: Smart Energy Systems, vol.92, pp.43-44, 2013.
URL : https://hal.archives-ouvertes.fr/hal-00772454

G. Hecht, R. Rouvoy, N. Moha, and L. Duchien, Proceedings of the Second ACM International Conference on Mobile Software Engineering and Systems, ser. MOBILESoft '15, pp.978-979, 2015.

J. Falleri, F. Morandat, X. Blanc, M. Martinez, and M. Monperrus, « Finegrained and accurate source code differencing, ACM/IEEE International Conference on Automated Software Engineering, ASE '14, pp.313-324, 2014.

A. Carette, M. A. Younes, G. Hecht, N. Moha, and R. Rouvoy, « Investigating the energy impact of Android smells, IEEE 24th Int. Conf. on Software Analysis, Evolution and Reengineering, pp.115-126, 2017.

G. Hecht, N. Moha, and R. Rouvoy, « An empirical study of the performance impacts of Android code smells, Proceedings of the International Conference on Mobile Software Engineering and Systems, MOBILESoft '16, pp.59-69, 2016.

I. Nadareishvili, R. Mitra, M. Mclarty, and M. Amundsen, Microservice Architecture: Aligning Principles, Practices, and Culture, 2016.

A. Balalaie, A. Heydarnoori, and P. Jamshidi, « Microservices architecture enables DevOps: migration to a cloud-native architecture, IEEE Software, vol.33, issue.3, pp.42-52, 2016.

. Devops and C. Com, Container market adoption -Survey, 2016.

C. Boettiger, « An Introduction to Docker for Reproducible Research, vol.49, pp.163-5980, 2015.

D. Merkel and . Docker, Lightweight Linux Containers for Consistent Development and Deployment », Linux J, vol.2014, issue.239, pp.1075-3583, 2014.

M. G. Xavier, M. V. Neves, F. D. Rossi, T. C. Ferreto, T. Lange et al., « Performance Evaluation of Container-Based Virtualization for High Performance Computing Environments, 2013 21st Euromicro International Conference on Parallel, Distributed, and Network-Based Processing, pp.233-240, 2013.

R. Peinl, F. Holzschuher, and F. Pfitzer, Docker Cluster Management for the Cloud -Survey Results and Own Solution », Journal of Grid Computing, vol.14, issue.2, pp.1572-9184, 2016.

R. Morabito, J. Kjällman, and M. Komu, Lightweight Virtualization: A Performance Comparison, Cloud Engineering (IC2E), 2015 IEEE International Conference on, pp.386-393, 2015.

W. Felter, A. Ferreira, R. Rajamony, and J. Rubio, « An updated performance comparison of virtual machines and Linux containers, Performance Analysis of Systems and Software (ISPASS), 2015 IEEE International Symposium on, pp.171-172, 2015.

G. Rushgrove, DockerCon16 -The Dockerfile Explosion and the Need for Higher Level Tools by Gareth Rushgrove, 2016.

W. Mcnelly, Interview of Frank Herbert: 'Herbert's science fiction novels, 1969.

T. Mens, « A state-of-the-art survey on software merging, IEEE Transactions on Software Engineering, vol.28, issue.5, pp.449-462, 2002.

V. Berzins and . Software-merge, Semantics of Combining Changes to Programs, ACM Trans. Program. Lang. Syst, vol.16, issue.6, pp.1875-1903, 1994.

L. Jackson and «. Semantic, Diff: a tool for summarizing the effects of modifications, Proceedings 1994 International Conference on Software Maintenance, pp.243-252, 1994.

J. Buffenbarger, « Syntactic software merging », in Software Configuration Management, pp.978-981, 1995.

T. Apiwattanapong, A. Orso, M. J. Harrold, and . Jdiff, A differencing technique and tool for object-oriented programs, Automated Software Engineering, vol.14, pp.1573-7535, 2007.

N. Niu, S. Easterbrook, and M. Sabetzadeh, « A category-theoretic approach to syntactic software merging, 21st IEEE International Conference on Software Maintenance (ICSM'05), pp.197-206, 2005.

O. Leßenich, S. Apel, and C. Lengauer, « Balancing precision and performance in structured merge, Automated Software Engineering, vol.22, issue.3, pp.1573-7535, 2015.

G. Cavalcanti, P. Borba, and P. Accioly, Evaluating and Improving Semistructured Merge », OOPSLA, vol.1, pp.2475-1421, 2017.

S. Apel, J. Liebig, B. Brandl, C. Lengauer, C. Kästner et al., Rethinking Merge in Revision Control Systems, Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering, ser. ESEC/FSE '11, pp.190-200, 2011.

O. Leßenich, J. Siegmund, S. Apel, C. Kästner, and C. Hunsen, « Indicators for merge conflicts in the wild: survey and empirical study, Automated Software Engineering, vol.25, issue.2, pp.1573-7535, 2018.

J. Eyolfson, L. Tan, and P. Lam, « Do Time of Day and Developer Experience Affect Commit Bugginess?, Proceedings of the 8th Working Conference on Mining Software Repositories, ser. MSR '11, pp.153-162, 2011.

P. Accioly, P. Borba, and G. Cavalcanti, « Understanding semi-structured merge conflict characteristics in open-source Java projects, Empirical Software Engineering, vol.23, issue.4, pp.1573-7616, 2018.

C. Brindescu, M. Codoban, S. Shmarkatiuk, and D. Dig, « How Do Centralized and Distributed Version Control Systems Impact Software Changes?, Proceedings of the 36th International Conference on Software Engineering, ser. ICSE, pp.322-333, 2014.

M. L. Guimarães and A. R. Silva, « Improving early detection of software merge conflicts, 2012 34th International Conference on Software Engineering (ICSE), pp.342-352, 2012.

T. Ziegler and . Gitcop, A Machine Learning Based Approach to Predicting Merge Conflicts from Repository Metadata, 2017.

G. G. Menezes, L. G. Murta, M. O. Barros, A. Van-der, and . Hoek, « On the Nature of Merge Conflicts: a Study of 2,731 Open Source Java Projects Hosted by GitHub, IEEE Transactions on Software Engineering, pp.1-1, 2018.

M. Acher, P. Collet, P. Lahire, R. B. France, and . Familiar, A domainspecific language for large scale management of feature models, Science of Computer Programming, vol.78, issue.6, pp.657-681, 2013.
URL : https://hal.archives-ouvertes.fr/hal-00767175

E. Silva, A. Leite, V. Alves, and S. Apel, ExpRunA : a domain-specific approach for technology-oriented experiments », Software & Systems Modeling, pp.1619-1374, 2019.