Benefits of Running Docker on VMware

Over the past several years, Docker has revolutionized the way organizations approach software development and deployment. By 2018, the adoption of Docker had surged significantly, reaching nearly half of enterprise environments worldwide. This rapid growth reflects a broader shift in the IT industry towards containerization and microservices architectures. Businesses increasingly seek solutions that enable faster application delivery, improved scalability, and enhanced resource utilization.

Docker’s platform offers a way to package applications with their dependencies into standardized units called containers. This technology simplifies moving applications across different environments, reduces conflicts caused by differing configurations, and improves consistency throughout the software lifecycle. The impact of Docker has been so profound that it has raised important questions about how containerization fits alongside traditional virtualization platforms that have long been the foundation of enterprise IT infrastructure.

Understanding VMware’s Role in Enterprise IT

VMware has been a dominant force in enterprise virtualization for many years. Its suite of virtualization technologies provides businesses with the ability to run multiple operating systems on a single physical server, effectively increasing hardware utilization and reducing costs. VMware’s flagship product, vSphere, is a type-1 hypervisor that installs directly on server hardware and manages virtual machines (VMs), each running its own operating system.

This approach allows organizations to isolate workloads, manage resources efficiently, and maintain a high level of control and security. VMware platforms have proven reliable and flexible, supporting a wide variety of enterprise applications and use cases. Because of this reliability, many IT teams have built their infrastructure and processes around VMware technology, creating a deep integration that can make transitioning to new paradigms seem challenging.

Differentiating Between Containerization and Virtualization

It is important to understand the fundamental differences between Docker containers and VMware virtual machines to appreciate how these technologies can coexist. Virtual machines are full operating system instances running on virtualized hardware, which means each VM includes its own OS kernel and consumes considerable system resources. This setup offers strong isolation but at the cost of increased overhead in terms of memory, storage, and startup time.

Docker containers, on the other hand, are lightweight environments that share the host operating system’s kernel but isolate applications and their dependencies. Because containers do not need to boot an entire OS, they are faster to start and use fewer resources. This makes containers ideal for packaging individual applications or microservices and deploying them rapidly.

While virtual machines provide complete OS-level isolation, containers focus on isolating application processes. This distinction allows containers to achieve higher density on the same hardware, enabling more efficient utilization of resources. The two technologies serve different purposes and can be used in complementary ways to meet diverse IT needs.

Why Combining Docker with VMware Makes Sense

Despite initial impressions, adopting Docker does not require abandoning VMware virtualization. Instead, many organizations find that integrating Docker containers into their existing VMware environments offers substantial benefits. VMware continues to provide a secure, isolated platform for running virtual machines, while Docker enables faster, more agile application deployment within those environments.

Developers benefit from Docker’s ability to streamline application packaging and distribution. Containers help eliminate environment inconsistencies, reduce deployment time, and facilitate continuous integration and continuous delivery (CI/CD) pipelines. VMware’s virtualization infrastructure provides the stability, security, and resource management capabilities necessary for running complex enterprise workloads.

By running Docker containers on VMware hosts, enterprises can maintain their investment in virtualization technology while gaining the agility and efficiency of containerization. This hybrid approach supports a gradual transition to modern application architectures without disrupting existing operations. It allows organizations to leverage the strengths of both platforms and adapt to evolving business requirements.

The growth of Docker has introduced a new paradigm in application deployment, focusing on lightweight, fast, and consistent environments. VMware remains a critical technology for enterprise IT, offering robust virtualization capabilities. Understanding the differences and complementary nature of these technologies is essential. Rather than replacing VMware, Docker enhances it by enabling more efficient application management and development workflows. This synergy is driving many organizations to adopt both platforms together, supporting digital transformation initiatives and modern IT operations.

The Shift Toward Application-Centric Development

Modern software development increasingly prioritizes managing applications rather than the underlying infrastructure. Developers want to focus on building, testing, and deploying applications quickly and reliably without being burdened by complex environment configurations or infrastructure management. Docker addresses this shift by providing an application containerization platform that packages everything an application needs—code, runtime, libraries, and dependencies—into a single container.

This packaging ensures that applications run consistently across different stages of the software lifecycle, from a developer’s laptop to testing environments and finally production. The container acts as a lightweight, portable unit that encapsulates the application environment, minimizing errors caused by differences between environments and reducing “works on my machine” issues.

How Docker Containers Differ from Virtual Machines

Unlike virtual machines, Docker containers do not include an entire guest operating system. Instead, containers run as isolated processes on a shared host operating system kernel. This difference is critical because it allows containers to be far smaller and more efficient than virtual machines. Containers start up quickly—often in seconds—compared to the minutes required for booting a full VM.

Inside a Docker host, multiple containers share the OS kernel and common resources, but each container is isolated in its namespace with limited access to the host and other containers. This setup provides a balance of resource efficiency and isolation that supports rapid application deployment and scaling.

Virtual machines, such as those managed by VMware vSphere, run full guest operating systems that provide strong isolation between environments. This is important for running diverse or legacy applications requiring different OS versions. However, this isolation comes at the cost of additional resource usage and slower start times compared to containers.

Docker Enhances Developer Productivity and Flexibility

Developers benefit greatly from Docker’s approach to application management. Because containers package applications and their dependencies, developers can create reproducible environments that behave identically in development, testing, and production. This consistency streamlines the development workflow and reduces integration issues.

Furthermore, Docker supports rapid environment provisioning. Developers can spin up new containers quickly for testing new features or bug fixes, enabling more agile development cycles. This flexibility accelerates innovation and reduces time-to-market for new applications and services.

Docker also integrates with modern DevOps tools and practices. It works well with continuous integration and continuous delivery (CI/CD) pipelines, automated testing frameworks, and orchestration platforms. These integrations help teams automate and scale application deployment, improving operational efficiency and reliability.

How VMware and Docker Complement Each Other in Application Delivery

VMware’s vSphere platform virtualizes entire operating systems and manages hardware resources, providing a stable, secure foundation for enterprise IT. VMware supports diverse workloads by allowing multiple VMs, each with its own OS, to run on a single physical host. This makes VMware ideal for applications that require strong OS-level isolation or need to run on different operating systems.

Docker containers, by focusing on individual applications rather than full OS environments, reduce resource consumption and improve deployment speed. Running Docker containers on VMware hosts allows enterprises to leverage the benefits of both technologies. VMware handles infrastructure management, security, and OS virtualization, while Docker streamlines application deployment and scaling.

This combination provides flexibility in how applications are managed and deployed. IT teams can continue using VMware to run traditional workloads and legacy applications, while adopting Docker containers for new, cloud-native applications. This hybrid approach facilitates modernization without disrupting existing systems.

Docker’s focus on application containers aligns closely with developer needs for simplicity, speed, and consistency in application deployment. Containers provide a lightweight, portable environment that accelerates development and reduces operational complexity. While VMware virtualizes full operating systems to provide robust infrastructure, Docker complements this by optimizing how applications run on that infrastructure.

Together, Docker and VMware create a powerful platform that supports both legacy and modern applications. This synergy allows organizations to balance resource efficiency, security, and developer productivity, paving the way for more agile and scalable IT operations.

The Financial Challenge of Virtualization Licensing and Infrastructure

Enterprise IT environments rely heavily on virtualization to optimize resource use and reduce hardware costs. VMware’s virtualization solutions have been instrumental in achieving these efficiencies by allowing multiple operating systems to run on shared physical servers. However, virtualization platforms come with licensing costs that can significantly impact IT budgets. These expenses include licenses for the hypervisor software, guest operating systems running inside virtual machines, and additional management or security tools.

As organizations scale their infrastructure to accommodate new applications and workloads, these licensing costs can rise sharply. Each new virtual machine may require an OS license and additional VMware licenses, contributing to higher capital and operational expenses. Moreover, the maintenance and renewal of these licenses represent ongoing costs that organizations must carefully manage to stay within budget.

When workloads increase rapidly, the cost of purchasing more licenses or expanding hardware resources can become a barrier to growth. IT leaders must find ways to balance performance requirements with budget constraints, all while supporting business needs for agility and innovation.

How Docker Containerization Helps Reduce Infrastructure Costs

Docker containerization presents a compelling solution to these cost challenges by enabling higher application density on existing infrastructure. Unlike virtual machines, which run entire operating systems, containers share the host OS kernel, significantly reducing the overhead per application instance. This lightweight architecture means that many more containers can run on the same hardware compared to virtual machines.

By containerizing applications, organizations can consolidate workloads more efficiently. This consolidation results in fewer physical servers needed to run the same number of applications, translating directly into hardware cost savings. It also reduces ancillary expenses such as power, cooling, and data center space, which are critical considerations in large-scale deployments.

Additionally, Docker containers are quick to start and stop, which improves resource utilization. Servers are less likely to sit idle, and IT teams can allocate resources dynamically to meet changing demand. This elasticity reduces the need for over-provisioning hardware “just in case,” which is a common practice in traditional virtualized environments.

Licensing Savings with Containerized Deployments

From a licensing perspective, containerization can help organizations optimize software licensing costs. Each virtual machine requires a separate OS license. For example, running multiple Windows Server virtual machines can become costly, as each instance may need a Windows Server license. Docker containers, by sharing the host OS, reduce the number of OS licenses required because multiple containers can run within a single OS instance.

This reduction in OS licenses directly translates into cost savings. Instead of purchasing and renewing multiple licenses for each virtual machine, companies can maintain fewer licenses by running containerized applications on fewer virtual machines or even on bare metal hosts.

On the VMware side, enterprises often purchase licenses based on the number of physical CPUs or hosts. With Docker containerization enabling more applications to run on the same hardware, organizations may avoid the need to buy additional VMware licenses for extra hosts or servers. This strategy maximizes the value of existing VMware investments.

Docker as an Augmentation to VMware Infrastructure

Rather than viewing Docker and VMware as competing technologies, many enterprises adopt a strategy where Docker acts as an augmentation to their existing VMware environment. This hybrid approach allows organizations to leverage the strengths of both platforms.

By deploying Docker containers on VMware virtual machines, IT teams can maintain the benefits of virtualization—such as security, isolation, and resource management—while gaining the agility and efficiency of containerization. This setup enables more effective server consolidation and improved resource utilization without sacrificing control or security.

In practice, this means organizations can extend the lifecycle of their VMware licenses and hardware by running containerized workloads alongside traditional virtual machines. This approach reduces the pressure to purchase new licenses or upgrade hardware prematurely, offering a more cost-effective path to scaling infrastructure.

Operational Cost Reduction Through Simplified Management

Managing enterprise IT infrastructure has traditionally been a complex, resource-intensive endeavor. Virtualized environments, while offering significant efficiencies in resource utilization and flexibility, bring their management challenges. Each virtual machine (VM) represents a separate operating system instance that requires ongoing maintenance, monitoring, patching, and troubleshooting. As the number of VMs grows, so does the administrative overhead, leading to increased operational costs.

Introducing Docker containers into this landscape fundamentally changes how IT teams manage applications and infrastructure. Containers encapsulate applications and their dependencies into standardized, lightweight units that simplify deployment and maintenance. This shift from VM-centric management to container-centric management can substantially reduce operational expenses by streamlining workflows, enhancing automation, and improving resource utilization.

Simplified Deployment and Updates

One of the most significant contributors to operational cost reduction is the simplification of application deployment and update processes. Traditional virtual machine environments require administrators to manage the operating system and application stacks separately for each VM. This involves regular OS patching, security updates, software installation, and configuration management — tasks that must be repeated for each virtual machine instance.

With Docker containers, the entire application environment, including all dependencies, is packaged into a single container image. When updates or patches are required, IT teams simply build a new container image with the updated software and redeploy it. This process eliminates the need to patch individual OS instances separately and ensures consistency across all deployment environments.

The ability to create immutable container images reduces configuration drift — a common issue in VM environments where VMs can diverge from their original configurations due to manual changes. Containers are disposable and can be replaced quickly, making it easier to maintain a known-good state across the infrastructure.

Faster Provisioning and Scaling

Operational costs are also reduced through faster provisioning and scaling of applications. Provisioning new virtual machines often involves several steps, including OS installation, configuration, patching, and software deployment, which can take hours or even days. In contrast, Docker containers can be started in seconds because they use a shared OS kernel and package only the necessary components.

This rapid startup time allows IT teams to respond quickly to changing business demands, spinning up or down application instances as needed without the overhead of managing full virtual machines. Automated orchestration tools like Kubernetes or Docker Swarm further simplify this process by managing container lifecycle, scaling, and health monitoring, reducing manual intervention.

By enabling just-in-time resource allocation, organizations avoid over-provisioning and reduce costs associated with idle infrastructure. This elasticity leads to better utilization of existing hardware and delays the need for additional capital investments.

Reduced Complexity in Monitoring and Troubleshooting

Monitoring and troubleshooting virtualized environments can be complex due to the multiple layers involved—physical hardware, hypervisor, guest OS, and applications. Each layer requires separate monitoring tools and expertise. Identifying the root cause of performance issues or failures often involves sifting through logs from various sources, increasing operational overhead, and response time.

Docker containerization simplifies monitoring by encapsulating applications within containers with well-defined boundaries. Container orchestration platforms provide centralized dashboards and logging aggregation, allowing IT teams to view the health and performance of applications and infrastructure in a unified interface.

The modular nature of containers makes it easier to isolate and diagnose problems. If a containerized application misbehaves, administrators can quickly restart or replace the affected container without impacting other services. This reduces downtime and operational costs associated with incident response and remediation.

Automation and DevOps Integration

Docker’s design aligns closely with modern DevOps practices, enabling higher degrees of automation in deployment pipelines. Automation is a key factor in reducing operational costs by minimizing manual tasks, increasing deployment speed, and improving reliability.

Continuous integration and continuous delivery (CI/CD) pipelines automate the building, testing, and deployment of container images. This automation reduces human error and accelerates the delivery of new features or fixes. It also allows IT operations teams to shift from reactive maintenance to proactive management.

Using Infrastructure as Code (IaC) tools in combination with container orchestration, organizations can automate infrastructure provisioning and management. This reduces the operational burden on system administrators and empowers development teams to deploy applications more independently, lowering operational costs.

Improved Resource Utilization

By running multiple containers on a single VM or physical server, organizations can improve resource utilization significantly. Virtual machines tend to be resource-heavy because each runs a full OS instance, consuming CPU, memory, and storage regardless of application demands. Containers share the host OS and consume only the resources needed for the application, which results in a higher density of workloads on the same hardware.

This increased density lowers the number of servers and VMs required, which reduces power, cooling, and hardware maintenance costs. Additionally, container orchestration platforms can dynamically allocate resources based on workload demand, optimizing resource consumption and reducing waste.

Better resource utilization not only cuts costs but also improves sustainability by lowering the environmental footprint of data centers.

Reduced Training and Staffing Costs

Managing a hybrid environment of virtual machines and containers can initially require new skills and training for IT staff. However, once teams are proficient with container technologies and orchestration tools, operational efficiencies emerge that reduce staffing needs.

The standardized, repeatable nature of container deployments reduces the complexity of managing diverse environments. IT teams spend less time troubleshooting environment inconsistencies or managing legacy software configurations.

Moreover, automation and orchestration reduce the demand for manual intervention in deployment, scaling, and recovery tasks, freeing IT personnel to focus on higher-value activities such as innovation and strategic projects.

Case Example: Operational Efficiency Gains

Consider an enterprise with a large number of web applications currently deployed on virtual machines. Each VM requires separate patching, updates, and monitoring, involving a sizable team of administrators and long maintenance windows.

By containerizing these applications, the organization can reduce the number of VMs needed and shift to automated deployment pipelines. Updates to applications become a matter of rebuilding and redeploying container images, dramatically reducing patch cycles and maintenance windows.

The organization also implements container orchestration, which automates scaling during traffic spikes and restarts failed containers without human intervention. Monitoring consolidates logs and metrics in a centralized dashboard, improving incident detection and resolution times.

Overall, these changes reduce operational labor costs, improve application uptime, and enable faster time-to-market for new features, creating substantial business value.

Challenges in Simplified Management and How to Overcome Them

While containerization offers many operational advantages, organizations must address several challenges to fully realize cost savings:

  • Managing Mixed Environments: Running containers alongside virtual machines requires integrated management tools that provide visibility across both environments. Investing in unified monitoring and management platforms helps address this complexity. 
  • Security Considerations: Operational simplification should not come at the expense of security. Applying best practices in container hardening and access control is critical to maintaining a secure environment. 
  • Cultural Change: Shifting to DevOps and containerized workflows requires organizational change and buy-in from both development and operations teams. Providing training and fostering collaboration are essential to success. 
  • Toolchain Integration: Selecting and integrating orchestration, CI/CD, and monitoring tools can be complex. Evaluating solutions for compatibility and scalability ensures smoother operations.

Operational cost reduction through simplified management is a significant advantage of adopting Docker containers on VMware infrastructure. By packaging applications into lightweight, standardized units, organizations can streamline deployment, patching, monitoring, and scaling processes.

Automation and orchestration reduce manual overhead, improve resource utilization, and accelerate application delivery. These improvements translate into lower operational expenses, better use of IT personnel, and improved agility.

While challenges exist, thoughtful planning, investment in tools, and organizational alignment enable enterprises to leverage containerization to achieve operational excellence and cost efficiency in today’s competitive digital landscape.

The Impact of Containerization on CapEx and OpEx

Capital expenditures (CapEx) and operational expenditures (OpEx) are two key financial metrics impacted by adopting Docker containerization on VMware infrastructure.

CapEx reductions stem from needing fewer physical servers and licenses. Since containers are lightweight, more applications fit on existing hardware, reducing the immediate need for costly hardware purchases. This helps organizations manage budgets more effectively, allocating funds to other strategic initiatives.

OpEx savings come from streamlined operations and improved resource efficiency. Containerization reduces the complexity of managing multiple OS instances, lowers maintenance burdens, and enhances deployment speed. These improvements free IT staff to focus on innovation and business value rather than routine maintenance.

Together, these savings improve the total cost of ownership (TCO) for IT infrastructure, making it easier for organizations to justify investments in modernizing their application delivery platforms.

Use Cases Demonstrating Cost Benefits of Docker on VMware

Several practical scenarios illustrate how Docker containerization on VMware delivers cost benefits:

  • Application Modernization: Legacy applications running on multiple virtual machines can be refactored into containerized microservices. This refactoring enables higher density on fewer VMs, reducing licensing and hardware needs. 
  • Development and Testing Environments: Development teams often require many isolated environments that may only be used intermittently. Containers allow rapid provisioning of these environments on shared infrastructure without the overhead of full virtual machines, reducing resource waste and licensing costs. 
  • Burst Workloads and Scaling: Applications with variable demand can scale container instances up or down quickly, avoiding the need for permanently over-provisioned virtual machines. This elasticity minimizes hardware and license waste.

Challenges and Considerations for Cost Optimization

While containerization offers significant cost benefits, organizations must consider certain challenges to realize these savings fully:

  • License Compliance: Running containers within virtual machines requires careful tracking of OS and hypervisor licenses to avoid compliance issues. Proper governance and tooling are essential. 
  • Infrastructure Planning: IT teams must plan resource allocation between containers and virtual machines carefully to avoid overloading hosts or underutilizing capacity. 
  • Skill Development: Teams need expertise in both container technologies and virtualization to manage hybrid environments effectively. 
  • Security and Governance: Ensuring containers meet enterprise security policies while running on virtualized infrastructure requires integrated monitoring and management solutions.

Unlocking Cost Efficiency with Docker and VMware

Containerization with Docker, when deployed on VMware virtualized infrastructure, offers a powerful approach to cost optimization in enterprise IT. By enabling greater application density, reducing OS and virtualization licensing requirements, and simplifying operational management, this hybrid strategy delivers tangible savings in both CapEx and OpEx.

Enterprises can leverage Docker to maximize the value of their existing VMware investments while gaining the agility and efficiency needed to support modern application delivery. Although challenges remain, careful planning and governance ensure that organizations realize these benefits safely and sustainably.

This balanced approach helps organizations maintain control over their IT environments, reduce costs, and accelerate innovation—key factors for thriving in today’s fast-paced digital economy.

Understanding Security in Containerized and Virtualized Environments

Security remains a top priority for organizations adopting new technologies. Both Docker containers and VMware virtual machines offer isolation features that protect applications and infrastructure, but their approaches differ. Understanding these differences and how they complement each other is crucial for building a robust security posture.

Containers provide process-level isolation within a shared operating system, while virtual machines provide hardware-level isolation by running separate operating systems. Each has inherent security strengths and potential vulnerabilities that must be managed.

The Security Model of Docker Containers

Docker containers isolate applications using Linux namespaces and control groups (cgroups). Namespaces create separate environments for processes, filesystems, network interfaces, and users, effectively sandboxing each container from others and the host system. Cgroups limit the resources (CPU, memory, I/O) that containers can consume, preventing a single container from monopolizing system resources.

Beyond these Linux kernel features, Docker adds its security layers. Containers run as isolated processes with limited privileges by default. Docker also supports security profiles such as AppArmor, SELinux, and seccomp to restrict system calls and enforce policies, reducing the attack surface.

The container image itself can be scanned and signed to ensure the integrity and provenance of the software running inside. This practice helps prevent the deployment of vulnerable or compromised code.

How Docker Provides Application-Level Isolation

Containers encapsulate an application and its dependencies, creating a consistent environment that reduces risk from misconfiguration. Since containers share the host OS kernel, vulnerabilities in the kernel could potentially affect all containers. However, because containers isolate processes and limit access to host resources, an exploit in one container is less likely to impact others or the host itself.

Running containers with minimal privileges, using read-only filesystems, and avoiding running as the root user further strengthen security. Network policies can control communication between containers and restrict access to external systems, enhancing defense in depth.

Docker’s rapid deployment capabilities also enable quick patching and updates. Containers can be rebuilt and redeployed with security fixes far more swiftly than traditional VMs, reducing exposure time.

Security Benefits of VMware Virtual Machines

VMware virtual machines provide strong security boundaries by running complete guest operating systems with dedicated kernel instances. This level of isolation means that if one VM is compromised, the attacker faces significant barriers before reaching the host or other VMs.

VMware hypervisors include built-in security features such as VM encryption, secure boot, and role-based access control. They allow for network segmentation, micro-segmentation, and firewalling at the VM level, further protecting workloads.

Virtual machines also support traditional security tools and agents that might not be feasible or effective in container environments. This support is critical for legacy applications and environments with stringent compliance requirements.

Combining Docker Containers with VMware Security Layers

Deploying Docker containers on VMware virtual machines provides multiple layers of defense, each reinforcing the other. Containers isolate applications at the process level, while VMware VMs provide hardware-level separation and protect the host environment.

This layered security approach helps prevent a breach in a container from escalating to the host or other VMs. Even if a container is compromised, VMware’s security mechanisms limit the potential damage, containing threats within the virtual machine boundary.

Furthermore, VMware’s management tools enable centralized monitoring and control of both VMs and container workloads. This visibility is essential for detecting anomalies, enforcing policies, and responding to incidents promptly.

Best Practices for Securing Docker on VMware Environments

To maximize security when running Docker on VMware, organizations should adopt several best practices:

  • Minimize Container Privileges: Run containers with the least privileges necessary, avoid the root user, and apply security profiles like AppArmor or SELinux. 
  • Use Hardened Base Images: Build containers from minimal, vetted base images to reduce vulnerabilities. 
  • Implement Network Segmentation: Use VMware NSX or similar tools to segment network traffic between VMs and containers, limiting exposure. 
  • Regularly Patch and Update: Use Docker’s rapid redeployment capabilities to apply security patches quickly. 
  • Monitor and Log Activity: Employ integrated monitoring solutions to track container and VM behaviors for suspicious activity. 
  • Enforce Compliance Policies: Ensure that both containers and VMs comply with organizational and regulatory security standards.

The Role of Docker and VMware in Compliance and Governance

Many organizations operate under strict compliance regulations requiring secure data handling and robust audit trails. VMware’s mature virtualization platform provides strong capabilities for logging, access control, and data protection, facilitating compliance efforts.

Docker’s immutability and container image signing features support governance by ensuring that only verified software is deployed. Together, these tools help organizations meet standards such as PCI-DSS, HIPAA, GDPR, and others.

Using a combined approach, IT teams can implement comprehensive policies covering both infrastructure and application layers, ensuring security and compliance from development to production.

Final Thoughts

Security is a critical factor when integrating Docker containers with VMware virtualization. Each technology offers unique protections—containers provide efficient, application-level isolation, while VMware delivers strong, hardware-level boundaries and enterprise-grade controls.

When combined, they form a multi-layered defense strategy that enhances security posture and reduces risk. Organizations can confidently adopt containerization within their existing VMware infrastructure, knowing that they maintain robust protection against threats.

Adopting best practices, leveraging security features on both platforms, and maintaining vigilant monitoring are essential to maximize these benefits. This approach ensures that the agility and efficiency gains from Docker do not come at the cost of security or compliance.