Understanding Your Ubuntu Version: A Critical Step for Robust Hosting Environments
In the dynamic world of web hosting, merely having a server online isn’t enough. The foundation of a reliable, secure, and performant digital presence often rests on the underlying operating system. For many businesses, developers, and website owners, Ubuntu stands out as a preferred choice for its stability, vast community support, and extensive software repositories. However, simply knowing you run Ubuntu is only the first step. Understanding “ubuntu how to see version” is not just about executing a command; it’s a foundational requirement that profoundly influences every aspect of your hosting strategy, from security posture to application compatibility and long-term scalability.
Ignoring your Ubuntu version can lead to a cascade of problems: unpatched security vulnerabilities, incompatible software updates, performance bottlenecks, and complicated migrations down the line. This article provides practical guidance on identifying your Ubuntu version and, more importantly, explains why this seemingly simple piece of information is critical for making informed decisions about your hosting environment, whether you’re managing a VPS, a dedicated server, or cloud instances.
Why Ubuntu Version Matters for Your Hosting Strategy
The specific version of Ubuntu running on your server is far more than just a label. It dictates a wide range of operational aspects that directly impact your application’s reliability and your business’s continuity. Overlooking this detail can introduce significant risks and unnecessary complexities.
- Security Patching and Vulnerabilities: Newer Ubuntu versions benefit from the latest security patches and vulnerability fixes. Running an older, unsupported version exposes your server to known exploits, making it a prime target for attackers. Each version has a defined End-of-Life (EOL) date, after which Canonical (Ubuntu’s developer) no longer provides security updates, leaving your system vulnerable. Understanding this schedule is paramount for proactive security.
- Software Compatibility and Dependencies: Your application’s stack – databases like MySQL or PostgreSQL, web servers like Nginx or Apache, programming languages such as PHP, Python, or Node.js – often have specific compatibility requirements with the underlying operating system version. Attempting to install a modern application on an outdated Ubuntu version can result in broken dependencies, compilation errors, or unstable performance. Conversely, legacy applications might not run correctly on newer OS versions without significant modifications.
- Performance Optimizations: Each new Ubuntu release typically includes updated kernel versions, system libraries, and performance enhancements. These can translate into better resource management, faster I/O operations, and improved overall application responsiveness. For resource-intensive applications or high-traffic websites, even marginal performance gains from a newer OS version can be significant.
- Long-Term Support (LTS) vs. Standard Releases: Ubuntu offers two main release types: Long Term Support (LTS) versions, which receive updates for five years or more, and standard releases, which have a shorter 9-month support cycle. Choosing the right release type is a strategic decision for your hosting environment, balancing stability against access to the latest software features. Most production servers favor LTS for its predictability and reduced maintenance overhead.
- Migration and Upgrade Planning: Knowing your current Ubuntu version is the first step in planning any server migration or in-place upgrade. Migrating from an old, unsupported version to a new one is often a more complex process than incremental upgrades between supported LTS versions. It affects how you backup, restore, and reconfigure your applications, influencing potential downtime and resource allocation.
Practical Methods to Identify Your Ubuntu Version
Identifying your Ubuntu version is straightforward, primarily utilizing the command-line interface (CLI) which is standard practice in server environments. While there are several commands, each offers slightly different information or is useful in specific contexts.
Using `lsb_release -a`
This is arguably the most comprehensive and commonly used command for determining your Ubuntu distribution’s specifics. `lsb_release` stands for Linux Standard Base Release, and the `-a` option requests all available information.
To use it, open your terminal (via SSH if on a remote server) and type:
lsb_release -a
Expected Output (example for Ubuntu 22.04 LTS):
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
Explanation:
- Distributor ID: Confirms it’s Ubuntu.
- Description: Provides a human-readable description, including the point release and LTS status. This is often the most direct answer.
- Release: The core version number (e.g., 22.04).
- Codename: The unique codename for that release (e.g., jammy for 22.04).
This command is almost universally available on modern Ubuntu systems and provides the most relevant details for hosting environment assessment.
Examining `/etc/os-release` or `/etc/issue`
In some minimal environments, containers, or older systems, `lsb_release` might not be installed by default. In such cases, you can check system files that contain distribution information.
For a detailed breakdown, `/etc/os-release` is often the go-to file:
cat /etc/os-release
Expected Output (example for Ubuntu 22.04 LTS):
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
BUILD_ID="20230811"
Explanation: This file provides a comprehensive set of variables describing the OS, including the `VERSION_ID` and `PRETTY_NAME` which clearly indicate the Ubuntu version.
Alternatively, the simpler `/etc/issue` file often contains basic version information displayed upon login:
cat /etc/issue
Expected Output (example for Ubuntu 22.04 LTS):
Ubuntu 22.04.3 LTS \n \l
This provides a quick, less detailed view.
Checking Kernel Version with `uname -r`
It’s crucial to understand that the kernel version is not the Ubuntu version, but it’s a related piece of information often needed for specific software compatibility (e.g., certain drivers, Docker versions). The kernel is the core of the operating system.
uname -r
Expected Output (example):
5.15.0-89-generic
Explanation: This output shows the kernel version (5.15.0), a patch level (-89), and the architecture (generic). While this tells you about the kernel, it doesn’t directly tell you if you’re running Ubuntu 20.04 or 22.04, as different Ubuntu versions can share similar kernel lines, or a newer kernel can be backported to an older Ubuntu. Always use `lsb_release -a` for the OS version.
Real-World Implementation Example
Consider a web development agency managing a client’s e-commerce platform hosted on a VPS. The client’s security audit has flagged their current PHP 7.4 version as reaching End-of-Life, requiring an upgrade to PHP 8.1 or newer. The agency’s first step is to ascertain if the current Ubuntu environment supports the desired PHP version or if an OS upgrade is necessary.
The system administrator connects via SSH to the production VPS and executes:
lsb_release -a
The output shows:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
From this, they immediately know they are on Ubuntu 20.04 LTS (Focal Fossa). A quick check of PHP version compatibility charts reveals that Ubuntu 20.04 LTS natively supports PHP 7.4 through PHP 8.0, and PHP 8.1 and 8.2 are available via additional PPAs (Personal Package Archives). This means an immediate OS upgrade might not be strictly necessary for the PHP upgrade alone, simplifying the immediate task. However, they also note that 20.04 LTS will reach its standard EOL in April 2025, prompting them to start planning for an OS migration to 22.04 LTS within the next year to maintain long-term support and security. This simple command informs both the immediate tactical decision (PHP upgrade) and strategic planning (OS migration).
The Impact of Ubuntu Version on Hosting Choices and Performance
Your Ubuntu version is intrinsically linked to the performance, security, and flexibility you get from your chosen hosting solution. It’s a key factor in maximizing your hosting investment.
- vps hosting: Virtual Private Servers (VPS) typically offer a choice of OS templates. Choosing an older Ubuntu LTS version might save a few dollars but could severely limit your software options and security posture. A newer LTS version (e.g., 22.04 LTS) on a netherlands vps, for instance, provides access to modern packages and better performance on contemporary hardware, ensuring your applications run optimally and securely within the isolated environment.
- Dedicated Server Environments: With a dedicated server, you have complete control over the OS installation. This freedom comes with the responsibility of selecting and maintaining your Ubuntu version. A newer LTS provides a strong foundation for high-performance computing, complex databases, or resource-intensive applications, leveraging the bare metal’s capabilities without legacy OS overhead.
- Cloud Hosting Platforms: Cloud providers make it easy to deploy instances with various Ubuntu versions. While convenient, ensuring consistency across multiple instances and planning for upgrades across a dynamic cloud infrastructure requires careful version management. Newer cloud instances will generally benefit from the latest OS optimizations tailored for virtualized environments.
- Containerization (Docker/Kubernetes): Even when using containerization, where applications are isolated, the host operating system’s Ubuntu version still matters. The host OS provides the kernel, resource management, and underlying security. A modern Ubuntu host ensures that your Docker engine or Kubernetes cluster can operate with the latest features and security patches, even if your containers run different Ubuntu base images. This separation allows more flexibility, but doesn’t eliminate the need for host OS version awareness.
- Performance Considerations: Newer Ubuntu versions often ship with optimized kernels that better utilize modern CPU architectures, improve memory management, and enhance file system performance (e.g., with features in ext4 or newer filesystems). For data-intensive applications, web servers handling high concurrency, or complex computations, these OS-level optimizations can yield tangible performance improvements, reducing load times and increasing throughput.
- Security Considerations: Beyond basic patches, newer Ubuntu versions often include updated firewall tools (ufw), hardened default configurations, and improvements in cryptographic libraries. Regularly updating your Ubuntu version ensures you benefit from these cumulative security enhancements, which are vital in protecting against evolving cyber threats and maintaining compliance with industry standards.
Ubuntu LTS vs. Standard Releases: A Strategic Hosting Decision
Choosing between Ubuntu’s Long Term Support (LTS) releases and its standard, non-LTS releases is a fundamental decision for any hosting environment. Each path offers distinct advantages and trade-offs that impact performance, security, cost, and management.
Performance Implications
- LTS: LTS releases prioritize stability and thoroughly tested components. While they may not immediately include the absolute latest kernel or software versions, their stable foundations are optimized for long-term reliability and predictable performance in demanding production environments. Performance enhancements are integrated carefully to avoid regressions.
- Standard: Standard releases often feature cutting-edge kernels and newer versions of core software packages. This can provide immediate access to the latest performance optimizations, hardware drivers, and experimental features, potentially offering a performance edge for specific, highly dynamic workloads that can leverage these advancements.
Security Posture
- LTS: LTS releases offer extended security maintenance directly from Canonical for five years (and often longer with ESM). This provides a predictable and robust security patching schedule, making them ideal for mission-critical applications where uninterrupted security updates are paramount for compliance and protection against known vulnerabilities.
- Standard: Standard releases have a much shorter security support window (typically 9 months). This means maintaining a secure posture requires more frequent and potentially disruptive OS upgrades (not just patches) to migrate to a newer release before the current one reaches EOL. Neglecting these frequent upgrades rapidly exposes your system to unpatched vulnerabilities.
Cost of Ownership
- LTS: The longer support cycle of LTS releases translates to lower operational costs over time. Less frequent major OS upgrades mean fewer administrative hours spent on planning, testing, and executing migrations, reducing potential downtime and resource expenditure.
- Standard: The short support cycle of standard releases incurs a higher operational cost. The need for frequent major upgrades demands more consistent administrative effort, potentially leading to more frequent planned (or unplanned) downtimes and increased testing requirements.
Scalability Considerations
- LTS: LTS releases are excellent for horizontal scaling. Their uniformity and long-term stability across numerous instances (e.g., in a cloud-based auto-scaling group or a large VPS farm) simplify management and ensure consistent behavior, making it easier to scale out large deployments reliably.
- Standard: Scaling with standard releases can be more challenging. The rapid release cycle means that maintaining a consistent environment across many servers requires more frequent re-imaging or in-place upgrades across a large fleet, which can introduce complexity and potential inconsistencies.
Ease of Management
- LTS: LTS releases are generally easier to manage due to their extended support and commitment to stability. Less frequent major changes and a longer support window reduce the burden on IT teams, allowing them to focus on application-level tasks rather than constant OS-level upgrades. Many managed hosting providers base their offerings on LTS for this reason.
- Standard: Managing standard releases is more demanding. IT teams must closely monitor release cycles, plan for more frequent, and often more complex, OS upgrades. This requires a higher level of vigilance and resource allocation to ensure systems remain supported and secure.
Recommended Use Cases
- LTS: Ideal for production web servers, enterprise applications, mission-critical databases, regulated environments (e.g., PCI DSS compliance), and any infrastructure where stability, long-term predictability, and minimal disruption are top priorities. Most Semayra clients running production workloads will opt for LTS.
- Standard: Best suited for development and testing environments, personal workstations, or niche applications that specifically require the absolute latest software features and where users are prepared for frequent system upgrades and potential breaking changes. Not typically recommended for primary production servers.
Ubuntu Versioning and Business Continuity: A Real-World Scenario
Imagine a rapidly growing marketing agency that relies heavily on a custom Customer Relationship Management (CRM) application, hosted on a single dedicated server running Ubuntu 16.04 LTS. This application handles client data, campaign tracking, and internal project management. The agency has been enjoying stable operations, but recently, their development team wants to integrate new AI-driven analytics tools that require Python 3.9+, and their current Ubuntu 16.04 environment only officially supports Python 3.5.
Specific Business Challenges:
- Security Exposure: Ubuntu 16.04 reached its standard End-of-Life in April 2021. While ESM (Extended Security Maintenance) might offer some reprieve, the system is fundamentally operating on an outdated and increasingly vulnerable foundation, putting sensitive client data at risk.
- Software Stagnation: The inability to easily install Python 3.9+ directly on 16.04 stifles innovation. The developers are resorting to complex manual compilations or container hacks, which are difficult to maintain and introduce inconsistencies.
- Performance Bottlenecks: As the agency scales, the legacy OS and its older kernel are not fully leveraging the dedicated server’s modern hardware capabilities, leading to minor but noticeable performance lags in the CRM.
- Compliance Risks: For certain clients, data handling regulations (like GDPR) demand up-to-date systems. The outdated OS could pose an audit risk.
The Dilemma: The agency faces a critical choice: continue with the old, increasingly risky setup, or undertake a potentially disruptive OS upgrade or migration. An in-place upgrade from 16.04 directly to, say, 22.04 LTS is highly complex and not officially supported, often leading to a broken system. A fresh installation and migration of the application is safer but requires careful planning and potential downtime.
Decision-Making Guidance: The agency’s IT team must first confirm their Ubuntu version (lsb_release -a). Recognizing the 16.04 EOL, they understand the urgency. Their best course of action is to plan a migration to a new dedicated server or a robust Netherlands VPS instance running the latest Ubuntu LTS (e.g., 22.04 LTS). This involves:
- Provisioning a New Environment: Setting up a new server with Ubuntu 22.04 LTS. Semayra could assist in provisioning such a powerful dedicated server, offering a clean slate.
- Application Compatibility Testing: Thoroughly testing the CRM application on the new environment, ensuring all dependencies (Python, database, web server) are correctly installed and configured for the new OS. This might involve setting up a staging environment.
- Data Migration Strategy: Planning a secure and efficient transfer of the CRM’s database and files from the old server to the new one, minimizing data loss and downtime.
- DNS Update and Cutover: Carefully coordinating the DNS changes to point to the new server once testing is complete, scheduling this during off-peak hours to minimize user impact.
This scenario underscores that knowing your Ubuntu version is not merely a technical detail, but a vital piece of information for strategic business planning, risk management, and ensuring the continuity and growth of critical operations.
Common Deployment Mistakes Related to Ubuntu Versions
While the commands to check your Ubuntu version are simple, operationalizing that knowledge correctly is where mistakes often occur, leading to significant headaches for businesses.
- Ignoring End-of-Life (EOL) Dates: Perhaps the most critical error. Deploying a new application or continuing to operate a production server on an Ubuntu version that is already at or near its EOL date is a recipe for security vulnerabilities, lack of official support, and eventual software incompatibility. The cost savings of not upgrading are quickly dwarfed by the risks.
- Assuming Software Compatibility: Many developers mistakenly assume that because an application runs on “Ubuntu,” it will run on *any* Ubuntu version. Not verifying that your specific application, its framework, database, and web server components are officially supported and stable on the *chosen* Ubuntu version before deployment is a common oversight. For example, a Python application designed for 20.04 might struggle with dependencies on 18.04.
- Skipping Staging Environments for Upgrades: Directly attempting an in-place Ubuntu OS upgrade on a production server without first testing the exact upgrade path on an identical staging environment is an extremely high-risk maneuver. OS upgrades can break configuration files, dependencies, and even core system functionalities, leading to prolonged downtime.
- Inadequate Backup Strategy Before Major Changes: Proceeding with any significant OS version change (upgrade or migration) without a full, verified, and restorable backup of the entire server (including data, configurations, and application code) is reckless. Without a solid backup, recovery from a failed upgrade is nearly impossible.
- Misinterpreting Kernel Version as OS Version: As discussed, conflating the output of `uname -r` (kernel version) with `lsb_release -a` (OS distribution version) can lead to incorrect assumptions about software compatibility or security status. They are distinct pieces of information.
- Neglecting Post-Upgrade Verification: After an OS upgrade, simply checking if the server boots isn’t enough. Failing to thoroughly test all deployed applications, services, network configurations, and security measures can leave hidden issues that only emerge under load or at critical times.
When an Older Ubuntu Version Is Not the Right Choice
While an older, stable Ubuntu LTS version might seem appealing for its familiarity or perceived reliability, there are critical scenarios where clinging to such a version becomes a significant liability rather than an asset for your hosting solution.
- Security-Critical Applications and Data: If your hosting solution supports financial transactions, stores sensitive customer data (e.g., healthcare records, personal identifiable information), or falls under strict compliance regulations (e.g., PCI DSS, HIPAA, GDPR), running an outdated Ubuntu version is an unacceptable risk. Lack of security patches, outdated cryptographic libraries, and known vulnerabilities make such a system a prime target for breaches.
- Demanding Performance Requirements: Modern applications, especially those handling high concurrency, large datasets, or complex real-time processing, benefit significantly from newer kernel optimizations, improved memory management, and updated file system capabilities found in recent Ubuntu releases. An older OS can be a bottleneck, preventing your hardware (be it a powerful dedicated server or an optimized VPS) from reaching its full potential.
- Compliance and Regulatory Mandates: Many industry standards and governmental regulations explicitly require systems to be kept up-to-date with security patches and supported software. Operating on an End-of-Life Ubuntu version will invariably lead to failed audits, potential fines, and a damaged reputation.
- Rapidly Evolving Software Stacks: If your development team needs to leverage the latest features of programming languages (e.g., newest PHP versions, Python 3.10+, Node.js LTS), databases, or web servers, an older Ubuntu version will restrict their choices. While PPAs can sometimes bridge the gap, they introduce additional maintenance complexity and potential instability.
- Integration with Modern Cloud Services: Many new cloud-native tools, APIs, and managed services are designed with recent Linux distributions in mind. Integrating an older Ubuntu server with these modern services can be problematic, requiring workarounds or limiting functionality.
- Difficulty Finding Support and Community Resources: As Ubuntu versions age, community support for them diminishes. Finding solutions to problems, getting advice, or hiring talent experienced with very old versions becomes increasingly difficult, leading to higher operational costs and frustration.
Practical Recommendations for Managing Ubuntu Versions in Your Hosting Environment
Effective management of your Ubuntu versions is not just a technical task; it’s a strategic imperative that supports the long-term health and security of your hosted applications.
- Prioritize LTS for Production Workloads: For critical production environments, always default to Ubuntu Long Term Support (LTS) releases. Their extended support cycles provide the stability, predictability, and long-term security patching necessary for business continuity. The minimal disruption associated with LTS makes it ideal for web servers, databases, and core business applications.
- Implement a Staging Environment for All Major Changes: Never perform an OS upgrade or a significant software stack update directly on a production server. Maintain a separate staging environment that mirrors your production setup. Test all changes, including OS upgrades, application migrations, and dependency updates, thoroughly in staging before deploying to live. This mitigates risks and prevents unexpected downtime.
- Plan for Proactive Upgrades/Migrations: Don’t wait until your current Ubuntu version reaches its End-of-Life (EOL). Begin planning for an upgrade or migration to the next LTS release at least 6-12 months before EOL. This allows ample time for research, testing, and execution, transforming a reactive scramble into a controlled, scheduled event.
- Automate Security Patching (Carefully): Configure `unattended-upgrades` to automatically install critical security patches on your Ubuntu servers. While this is essential for security, always test major kernel updates or significant package updates on staging first, as even security patches can occasionally introduce regressions.
- Leverage Managed Hosting for Expertise: For businesses without dedicated IT operations staff, consider a managed hosting solution. Providers like Semayra can take on the responsibility of OS version management, security patching, and even assist with major OS upgrades. This offloads complex tasks, ensures your servers are always on supported versions, and frees your team to focus on application development.
- Document Everything: Maintain clear, up-to-date documentation of your server’s Ubuntu version, its EOL date, significant installed software versions, and any custom configurations or dependencies. This documentation is invaluable for troubleshooting, upgrades, and onboarding new team members.
- Understand the Trade-offs of Containerization: While Docker and Kubernetes can abstract applications from the host OS, making application migrations easier, the underlying host OS still needs to be maintained and its Ubuntu version managed. Don’t assume containerization completely eliminates the need for host OS version awareness.
Related Hosting Solutions
Understanding your Ubuntu version is a fundamental skill that applies across various hosting paradigms, each offering distinct advantages based on your operational needs.
For those requiring top-tier hardware, dedicated resources, and often proactive management of the underlying operating system, premium hosting options typically ensure that your Ubuntu environment is robust, performant, and kept up-to-date by the provider, minimizing your direct operational burden.
When specific jurisdictional or privacy requirements are paramount, offshore hosting can provide a suitable infrastructure. Regardless of the location, the principles of checking and managing your Ubuntu version remain identical for ensuring the security and stability of your applications within that environment.
Many businesses and developers opt for a Netherlands VPS (Virtual Private Server) due to its strategic location, excellent connectivity, and a strong balance between cost-effectiveness and control. On a VPS, you generally have full root access to your Ubuntu installation, making the knowledge of how to check and manage its version a daily operational necessity to configure software, apply updates, and troubleshoot issues.
For ultimate control and resource dedication, a Dedicated Server provides exclusive access to physical hardware. This choice grants you complete authority over the operating system, including the initial Ubuntu installation and all subsequent version management, highlighting the absolute importance of understanding your OS version lifecycle and maintenance requirements.
FAQ: Ubuntu Versioning for Hosting Environments
Q1: Why can’t I just use any Ubuntu version a hosting provider offers?
While hosting providers may offer various Ubuntu images, choosing any version without consideration is risky. Your decision should align with your application’s specific software dependencies, performance requirements, and your business’s security and compliance mandates. Older versions may lack security patches and compatibility with modern software, while non-LTS versions require more frequent, potentially disruptive, upgrades.
Q2: What is the difference between `lsb_release -a` and `uname -r`?
`lsb_release -a` provides information about your Ubuntu distribution itself, including its version number (e.g., 22.04 LTS) and codename. `uname -r`, on the other hand, shows the version of the Linux kernel currently running. While related, they are distinct. You use `lsb_release -a` to identify your operating system version, and `uname -r` to check the kernel, which might be relevant for specific hardware drivers or kernel-dependent software.
Q3: How often should I check my Ubuntu version on a production server?
You don’t need to check your Ubuntu version daily, as it doesn’t change on its own. However, you should be aware of it and verify it:
- Before installing new major software packages or frameworks.
- Before planning any significant system changes or migrations.
- Regularly (e.g., quarterly or biannually) as part of a system audit to ensure you are aware of its End-of-Life (EOL) date and can plan for upgrades well in advance.
Q4: What are the risks of running an End-of-Life (EOL) Ubuntu version?
Running an EOL Ubuntu version carries significant risks, including:
- Security Vulnerabilities: No more official security patches, leaving your server exposed to known exploits.
- Software Incompatibility: Difficulty installing or updating modern applications and their dependencies.
- Compliance Failures: Inability to meet industry standards (e.g., PCI DSS) or regulatory requirements.
- Lack of Support: Diminished community and vendor support for troubleshooting.
- Instability: Potential for unforeseen issues due to unpatched bugs or outdated libraries.
Q5: Can I upgrade an Ubuntu server directly from a very old version (e.g., 16.04) to the latest LTS (e.g., 22.04)?
Direct in-place upgrades across multiple LTS versions (e.g., 16.04 directly to 22.04) are generally not recommended or officially supported by Ubuntu. The recommended upgrade path is sequential (e.g., 16.04 to 18.04, then 18.04 to 20.04, then 20.04 to 22.04). Each step is a major undertaking. For such significant jumps, a cleaner and often safer approach is to provision a new server with the latest desired Ubuntu LTS version and then migrate your applications and data to the new environment, rather than attempting a complex, multi-step in-place upgrade that carries a high risk of failure and prolonged downtime.