Language Selection

English French German Italian Portuguese Spanish


LWM Articles on Programming (Outside Paywall Now)

Filed under
  • C library system-call wrappers, or the lack thereof

    User-space developers may be accustomed to thinking of system calls as direct calls into the kernel. Indeed, the first edition of The C Programming Language described read() and write() as "a direct entry into the operating system". In truth, user-level "system calls" are just functions in the C library like any other. But what happens when the developers of the C library refuse to provide access to system calls they don't like? The result is an ongoing conflict that has recently flared up again; it shows some of the difficulties that can arise when the system as a whole has no ultimate designer and the developers are not talking to each other.
    Calling into the kernel is not like calling a normal function; a special trap into the kernel must be triggered with the system-call arguments placed as the kernel expects. At a minimum, the system-call "wrapper" provided by the C library must set up this trap. In many cases, more work than that is required; the functionality provided by the kernel does not always exactly match what the application (or the relevant standards) will expect. Features like POSIX threads further complicate the situation. The end result is that a lot of work can be happening between the application and the kernel when a system call is made. Doing that work is, in most cases, delegated to the C library.

  • Device-tree schemas

    Device trees have become ubiquitous in recent years as a way of describing the hardware layout of non-discoverable systems, such as many ARM-based devices. The device-tree bindings define how a particular piece of hardware is described in a device tree. Drivers then implement those bindings. The device-tree documentation shows how to use the bindings to describe systems: which properties are available and which values they may have. In theory, the bindings, drivers and documentation should be consistent with each other. In practice, they are often not consistent and, even when they are, using those bindings correctly in actual device trees is not a trivial task. As a result, developers have been considering formal validation for device-tree files for years. Recently, Rob Herring proposed a move to a more structured documentation format for device-tree bindings using JSON Schema to allow automated validation.

    Device-tree documentation today is free-form text with some defined structure and optional examples (like the generic GPIO clock multiplexer documentation in gpio-mux-clock.txt). For new bindings, the review process is entirely manual and depends on the reviewers to find typos and errors that an automated system might be expected to catch. No tool exists to check whether any given device-tree file conforms to the binding documentation. In addition, the bindings documentation files sometimes either duplicate information that is also contained elsewhere or are missing information that is necessary to validate a device-tree file.

    Numerous proposals have been made in the past to address the validation of device trees. One went as far as using YAML as a source format for device-tree files. Herring does not go that far; instead he proposes to convert only the documentation files, using JSON Schema for the schema vocabulary, while leaving the device-tree format itself unchanged. He explained the choice in the submission cover letter: "the language has a defined specification, maps well to DT data, and there are numerous existing tools which can be leveraged". He prefers to use a YAML subset because it is generally considered more human-readable and allows certain additions, including comments. This solution also takes advantage of existing technology and libraries and avoids inventing a new language. The goal was to allow validating device-tree files at build time and verifying the correctness of the documentation. In addition, error and warning messages can be made more meaningful.

  • Getting started with Web Scraping using Python [Tutorial]

Rust Survey 2018 key findings: 80% developers prefer Linux, WebAssembly growth doubles, and more

Filed under

Yesterday, the Rust Survey team published the results of their annual Rust survey of 2018. This year’s survey was launched in 14 different languages which helped in increasing the number of responses to 5991. The survey highlights that there is a slight increase in medium to large investments in Rust, most of the users prefer Linux over Windows for development, and more.

Read more

Programming: Clang, Go, Python and Rust

Filed under
  • GNU Hurd Toolchain Support Added To LLVM Clang Compiler

    While GNU Hurd is designed to go hand-in-hand with the GNU Compiler Collection (GCC), there is now upstream compiler toolchain support with the more liberally licensed LLVM Clang C/C++ compiler.

    The GNU Hurd target was merged into the Clang compiler for Hurd toolchain support and handling of its triple. The 300+ lines of code adding support for this GNU platform into Clang was merged overnight in time for LLVM/Clang 8.0 due out early next year.

  • Go 2, here we come!

    At GopherCon 2017, Russ Cox officially started the thought process on the next big version of Go with his talk The Future of Go (blog post). We have called this future language informally Go 2, even though we understand now that it will arrive in incremental steps rather than with a big bang and a single major release. Still, Go 2 is a useful moniker, if only to have a way to talk about that future language, so let’s keep using it for now.

  • Funding for 64-bit Armv8-a support in PyPy

    At PyPy we are trying to support a relatively wide range of platforms. We have PyPy working on OS X, Windows and various flavors of linux (and unofficially various flavors of BSD) on the software side, with hardware side having x86, x86_64, PPC, 32-bit Arm (v7) and even zarch. This is harder than for other projects, since PyPy emits assembler on the fly from the just in time compiler and it requires significant amount of work to port it to a new platform.

  • Refactoring allowed URLs in librsvg

    While in the middle of converting librsvg's code that processes XML from C to Rust, I went into a digression that has to do with the way librsvg decides which files are allowed to be referenced from within an SVG.

  • Python Data Visualization with Matplotlib
  • Python Application Dependency Management in 2018

    We have more ways to manage dependencies in Python applications than ever. But how do they fare in production? Unfortunately this topic turned out to be quite polarizing and was at the center of a lot of heated debates. This is my attempt at an opinionated review through a DevOps lens.

Programming: Python Developers

Filed under
  • PyPy Development

    At PyPy we are trying to support a relatively wide range of platforms. We have PyPy working on OS X, Windows and various flavors of linux (and unofficially various flavors of BSD) on the software side, with hardware side having x86, x86_64, PPC, 32-bit Arm (v7) and even zarch. This is harder than for other projects, since PyPy emits assembler on the fly from the just in time compiler and it requires significant amount of work to port it to a new platform.

  • PyCharm 2018.3.1 RC Out Now
  • The Python API for Juniper Networks

    Juniper networks have always been a favorite among the service provider crowd. If you take a look at the service provider vertical, it would make sense that automating network equipment is on the top of their list of requirements. Before the dawn of cloud-scale data centers, service providers were the ones with the most network equipment.

  • Explorative Data Analysis with Pandas, SciPy, and Seaborn

    In this post we are going to learn to explore data using Python, Pandas, and Seaborn. The data we are going to explore is data from a Wikipedia article. In this post we are actually going to learn how to parse data from a URL, exploring this data by grouping it and data visualization. More specifically, we will learn how to count missing values, group data to calculate the mean, and then visualize relationships between two variables, among other things.

    In previous posts we have used Pandas to import data from Excel and CSV files. Here we are going to use Pandas read_html because it has support for reading data from HTML from URLs (https or http). To read HTML Pandas use one of the Python libraries LXML, Html5Lib, or BeautifulSoup4. This means that you have to make sure that at least one of these libraries are installed. In the specific Pandas read_html example here, we use BeautifulSoup4 to parse the html tables from the Wikipedia article.

  • Common Mistakes about Generational Garbage Collection

    When talking about garbage collection, the notion of "generational collection" comes up. The usual motivation given for generational garbage collection is that "most objects die young". Therefore, we put the objects that survive a collection cycle (and therefore have proven some resistance) in a separate generation that we scan less often.

    This is an optimization if the probability of an object that has survived a cycle to be garbage by the time the next collection cycle has come around is lower than the probability of a newly allocated object to be garbage.

Programming: LLVM/Clang, Java/OpenJDK, Python and More

Filed under
  • Clang Picks Up Support For Per-Function Speculative Load Hardening (Spectre V1)

    For several months now the mainline LLVM Clang compiler code has offered Speculative Load Hardening (SLH) for the compiler-based approach for Spectre Variant One protection for critical software that might not be mitigated by hand against Spectre V1 vulnerabilities that can be picked up by Smatch and other utilities. The Clang compiler now has support for SLH on a function-by-function basis.

    Enabling Speculative Load Hardening can be done with LLVM/Clang 7.0+ via the "-mspeculative-load-hardening" flag, which enables SLH for all functions being compiled. But with this latest addition to Clang as of this week, an SLH attribute is now available for C/C++ functions and Objective-C methods for enabling the behavior on a function-by-function manner.

  • The technological transition of OpenJDK

    As we explored in our last post, there are major changes coming to Java. By way of quick refresher - OpenJDK is the open source reference implementation of the Java Platform, Standard Edition (Java SE). Oracle has recently announced changes that affect both the upstream community releases and Oracle’s proprietary distribution of OpenJDK. With many organizations depending on Java for their core business-critical applications, the changes are a big deal and many customers are still only just realizing the impact it has on their plans.

  • Understanding Conda and Pip
  • Create a game’s start scene for pygame project
  • Create a score manager class for pygame project
  • Dockerizing a Python Django Web Application
  • Continuous Deployment of a Python Flask Application with Docker and Semaphore
  • Learning Python: From Zero to Hero
  • RMOTR: Google Sheets with Python (live demo)
  • Let PyCharm Do Your Import Janitorial Work
  • Saving Text, JSON, and CSV to a File in Python
  • AutoHotkey, Python style
  • Search Algorithms in Python
  • Report from PyCon Zimbabwe 2018

    The 3rd edition of Pycon Zimbabwe was held from the 19th to the 20th of October, 2018 under the theme: “For the community, by the community”. The conference was hosted at Cresta Oasis Hotel in Harare, Zimbabwe.

  • Kubernetes for Python Developers: Part 1

    Kubernetes is an open-source container-orchestration system for automating deployment, scaling and management of containerised apps.

  • Measuring community opinion: subreddits reactions to a link

    As everyone knows a lot of subreddits are opinionated, so I thought that it might be interesting to measure the opinion of different subreddits opinions. Not trying to start a holy war I’ve specifically decided to ignore r/worldnews and similar subreddits, and chose a semi-random topic – “Apu reportedly being written out of The Simpsons”.

    For accessing Reddit API I’ve decided to use praw, because it already implements all OAuth related stuff and almost the same as REST API.

  • The DSF Board elections - what about you?

    I'm standing down from my position on the Django Software Foundation Board, having served for three years as the DSF's Vice-President (it's a nice role to have - but not nearly as grand as it sounds).

    Unfortunately, people do in fact often think that being on the DSF board is somehow a grand role, an exclusive kind of position for exclusive people, or even that it's only for people who somehow "deserve" to be Board members. Needless to say, that's really not true.

  • Simple is Better Than Complex: Advanced Form Rendering with Django Crispy Forms
  • String copying in the kernel

    One of the many areas that the kernel self protection project looks at is making sure kernel developers are using APIs correctly and safely. The string APIs, in particular string copying APIs, seem to be one area that gets developers confused. Strings in C aren't real1 in that there isn't a proper string type. For the purposes of this discussion, a C string is an array of characters with a terminating NUL (\0) character.

  • RcppArmadillo

    A new RcppArmadillo release arrived at CRAN overnight. The version is a minor upgrade and based on the new Armadillo bugfix release 9.200.5 from yesterday. I also just uploaded the Debian version.

    Armadillo is a powerful and expressive C++ template library for linear algebra aiming towards a good balance between speed and ease of use with a syntax deliberately close to a Matlab. RcppArmadillo integrates this library with the R environment and language–and is widely used by (currently) 539 other packages on CRAN.

  • Fortran is still a thing

    Fortran is not, of course, outdated, and it’s not at all complex. In fact, it has grown into these myths exactly because it is that good at what it does. It was designed to make number-crunching easy and efficient. Its users are scientists and engineers; not computer scientists and software engineers, but the real ones. And when engineers have a tool for the problem, they solve the problem with the tool. The problem comes first, not the code.

Python Programming Miscellany

Filed under
  • Install Python3 on Ubuntu 18.04 and Set Up a Virtual Programming Environment
  • Support Python 2 with Cython
  • Python Community Interview With Emily Morehouse

    Emily is one of the newest additions to the CPython core developer team, and the founder and director of engineering of Cuttlesoft. Emily and I talk about the recent CPython core developer sprint and the fact that she completed three majors in college at the same time! We’ll also get into her passion for compilers and abstract syntax trees.

  • Python programming: Searching for Mersenne primes
  • What, No Python in RHEL 8 Beta?

    Of course we have Python! You just need to specify if you want Python 3 or 2 as we didn’t want to set a default. Give yum install python3 or yum install python2 a try. Or, if you want to see what we recommend you install yum install @python36 or yum install @python27. Read on for why.

    For prior versions of Red Hat Enterprise Linux, and most Linux Distributions, users have been locked to the system version of Python unless they got away from the system package manager. While this can be true for a lot of tools (ruby: rvm; node: nvm) the Python use case is worse because so many Linux tools (like yum) rely on Python.

    In order to improve this experience for RHEL8 users, we have moved the Python used by the system “off to the side”. In RHEL 8 we also introduced Modularity. As a result, in combination with Python’s ability to be parallel installed, we can now make multiple versions of Python available and installable, from the standard repositories, installing to the standard locations. Now, users can choose what version of Python they want to run in any given userspace and it simply works. For more info, see my article, Introducing Application Streams in RHEL 8.

Researchers estimate that Python, Javascript, and R contribute billions to GDP

Filed under

Gross domestic product, perhaps the most commonly used statistic in the world for evaluating economic progress, has some issues.

Increasingly, one of the biggest problems is that GDP generally underestimates the value of free goods and services—checking facts on Wikipedia or sharing photos on Instagram, for instance. GDP is best at measuring the impact of TV and car sales—not of things available for free or that require you to view ads, like broadcast TV or Facebook, explains the Financial Times’s Gillian Tett.

As a new research paper points out, this shortcoming also means GDP may be missing a lot of value created in the form of free programming languages (pdf). The most popular programming languages, like JavaScript and Python, are open source. This means that anyone can use them for free and modify them to develop new programs that they can then offer for free or for sale. JavaScript, for example, is used on about 95% of websites. Python, the most popular tool for data scientists, is used by companies like Google and Facebook to analyze data and develop new products.

Read more

Programming: Rust, Selenium and Python

Filed under
  • Andy Wingo: instruction explosion in guile

    In the previous blog post I wrote about how to write a RGB to grayscale conversion filter for GStreamer in Rust. In this blog post I’m going to write about how to optimize the processing loop of that filter, without resorting to unsafe code or SIMD instructions by staying with plain, safe Rust code.

    I also tried to implement the processing loop with faster, a Rust crate for writing safe SIMD code. It looks very promising, but unless I missed something in the documentation it currently is missing some features to be able to express this specific algorithm in a meaningful way. Once it works on stable Rust (waiting for SIMD to be stabilized) and includes runtime CPU feature detection, this could very well be a good replacement for the ORC library used for the same purpose in GStreamer in various places. ORC works by JIT-compiling a minimal “array operation language” to SIMD assembly for your specific CPU (and has support for x86 MMX/SSE, PPC Altivec, ARM NEON, etc.).

  • Selenium, jQuery and File uploads

    One of the contracts I’ve been working on recently is working with Gurock building a test automation system for a PHP application, their test management app TestRail. As well as building the instrastructure for the application testing and the API testing I’ve once again been involved in the nitty-gritty of testing a web application with Selenium and all the fun that involved.

    And actually it has been fun. We’ve had a bunch of issues to overcome and despite the usual pain and trauma and running round in circles we seem to have overcome most of them and have a test suite that is robust against the three different platforms we’re testing against.

  • Continuous Integration with Python: An Introduction

    When writing code on your own, the only priority is making it work. However, working in a team of professional software developers brings a plethora of challenges. One of those challenges is coordinating many people working on the same code.

    How do professional teams make dozens of changes per day while making sure everyone is coordinated and nothing is broken? Enter continuous integration!

  • Python Cyber Monday Sales
  • Truths programmers should know about case

    A couple weeks ago I gave a talk about usernames at North Bay Python. The content came mostly from things I’ve learned in roughly 12 years of maintaining django-registration, which has taught me more than I ever wanted to know about how complex even “simple” things can be.

    I mentioned toward the beginning of the talk, though, that it wasn’t going to be one of those “falsehoods programmers believe about X” things. If you’re not familiar with those, you can just Google for “falsehoods programmers believe” and get a bunch of typical examples. My issues with the “falsehoods” articles is, basically, that they tell you a bunch of things they say are wrong, but many don’t tell you why those things are wrong or what they think you should do instead. Which I suspect will just lead people to read the article, pat themselves on the back, and then find new and exciting ways to be wrong that weren’t mentioned, because they haven’t actually learned about the underlying issues.

  • Python founder Guido van Rossum: What do do with your computer science career

    I regularly receive questions from students in the field of computer science looking for career advice.

    Here's an answer I wrote to one of them. It's not comprehensive or anything, but I thought people might find it interesting.

    The question about "9-5" vs. "enterpreneur" is a complex one -- not everybody can be a successful entrepreneur (who would do the work? Smile and not everybody has the temperament for it. For me personally it was never an option -- there are vast parts of management and entrepreneurship that I wouldn't enjoy doing, such as hiring (I hate interviewing and am bad at it) and firing (too emotionally draining -- even just giving negative feedback is hard for me). Pitching ideas to investors is another thing that I'd rather do without.

  • Contributor Focus: Zander Brown

    All I can say is that I’m thankful for his considerable contributions to Mu’s code base, eagle-eyed code reviews and seemingly limitless Pythonic knowledge.

    Actually, when I met Zander for the first time in July, it turned out he’s a 17 year-old studying for his A-levels (the exams teenagers sit in the UK to help them to get into university). He’s doing A-levels in Maths, Physics and Computer Science. He’s third from the left in the picture below:

Compilers: Rust and GCC 7.4 RC1

Filed under
  • RLSL Continues Maturing For Compiling Rust To SPIR-V For Use With Vulkan Drivers

    One of the most passionate topics by readers in the Phoronix Forums is the Rust programming language. For about one year now "RLSL" has been in the works as a Rust-based shading language that can compile into SPIR-V. While initially I held off on writing about it to see if it would be just another small toy project, RLSL has continued maturing and seeing new functionality added in.

  • GCC 7.4 Status Report (2018-11-22), GCC 7.4 RC1 scheduled for next week
  • GCC 7.4 Is Being Released Soon

    While GCC 9 is releasing in early 2019, for those still depending upon last year's GCC 7 compiler series, the GCC 7.4 point release will soon be out. 

    SUSE's Richard Biener is putting the finishing touches on GCC 7.4. He intends to issue the first release candidate towards the end of this week while the official GCC 7.4.0 compiler release shouldn't be long after that. The GCC 7 branch remains open for bug and documentation fixes.

Programming: Mixing Languages and Python News

Filed under
  • How to use multiple programming languages without losing your mind

    With all the different programming languages available today, many organizations have become digital polyglots. Open source opens up a world of languages and technology stacks developers can use to accomplish their tasks, including developing and supporting legacy and modern software applications.

    Polyglots can talk with millions more people than those who only speak their native language. In software environments, developers don't introduce new languages to achieve specifc ends, not to communicate better. Some languages are great for one task but not another, so working with multiple programming languages enables developers to use the right tool for the job. In this way, all development is polyglot; it's just the nature of the beast.

    The creation of a polyglot environment is often gradual and situational. For example, when an enterprise acquires a company, it takes on the company's technology stacks—including its programming languages. Or as tech leadership changes, new leaders may bring different technologies into the fold. Technologies also fall in and out of fashion, expanding the number of programming languages and technologies an organization has to maintain over time.

    A polyglot environment is a double-edged sword for enterprises, bringing benefits but also complexities and challenges. Ultimately, if the situation remains unchecked, polyglot will kill your enterprise.

  • How many programming languages is too many for one project?

    One great thing about programming languages is that there is such diversity that you can choose the best one to solve any given problem. But sometimes the worst thing can be when projects take advantage of this and build applications or systems of applications that require domain knowledge of many different languages. When this happens, it can be difficult for everyone, or even anyone, to fully understand the scope of the project.

  • 54: Python 1994 - Paul Everitt

    Paul talks about the beginning years of Python.
    Talking about Python's beginnings is also talking about the Python community beginnings.
    Yes, it's reminiscing, but it's fun.

  • PyDev of the Week: Reimar Bauer

    This week we welcome Reimar Bauer (@ReimarBauer) as our PyDev of the Week! Reimar is a core developer of the popular Python wiki package, MoinMoin. He has spoken at PyCON DE, FOSDEM and EuroPython about Python. Let’s take a few minutes to get to know him better!

Syndicate content

More in Tux Machines

Games: Metropolisim, Monster Prom, Kingdom Two Crowns and Lots More

  • Metropolisim aims to be the deepest city-building simulation experience ever, will have Linux support
    Metropolisim from developer Halfway Decent Games is releasing next year, with a pretty bold aim to be the deepest city-building simulation experience ever.
  • Monster Prom, the dating sim that won me over is now available on GOG
    Visual novels and dating sims aren't something I'm usually into, however Monster Prom is actually funny and worth playing and it's now available on GOG. I know we have a number of GOG fans here, so hopefully this will be interesting for you. As always, we try to treat all stores equally with release info.
  • Kingdom Two Crowns will be coming to Linux after all with the Quality of Life update
    Kingdom Two Crowns, the third in the Kingdom series released recently for Windows and Mac. It looked like we weren't getting it, but it's now confirmed to be coming. In their new roadmap post on Reddit and Steam, under the "QoL #01 Update" (Quality of Life Update) they noted that they will add "Add SteamOS (Linux) Support". This update is due out sometime early next year. This is really nice news, it's good to know they didn't give up on supporting Linux after all.
  • Steam Link for the Raspberry Pi is now officially available
    After a rather short beta period, the Steam Link application for the Raspberry Pi is now officially out.
  • Valve in it for the 'long haul' with Artifact, first update out and a progression system due soon
    Artifact, the big new card game from Valve isn't doing so well but Valve won't be giving up any time soon. The first major update is out, with a progression system due soon. At release, it had around sixty thousand people playing and that very quickly dropped down hard. Harder than I expected, a lot worse than Valve probably thought it would too.
  • Bearded Giant Games open their own store with a 'Linux First Initiative'
    Bearded Giant Games, developer of Ebony Spire Heresy have announced their new online store along with a 'Linux First Initiative'. I know what you're thinking already "not another store", but fear not. For now, it's mainly going to be a place for them to sell their games directly. Speaking about it in a blog post, they mentioned how they hate having to check over multiple forums, channels, emails and so on to stay up to date and they wish "to spend more time giving love to my projects instead of updating 4 different distribution channels, translating pages, writing different press releases and making separate builds"—can't argue against that.
  • The Forgotten Sanctum, the final DLC for Pillars of Eternity II is out along with a patch
    Pillars of Eternity II: Deadfire expansions come to a close with the release of The Forgotten Sanctum along with a major update now out.
  • Pre-order Meeple Station for instant beta access, what the developers say is like Rimworld in space
    Meeple Station, the space station building sim that the developers say is like Rimworld in space can now be pre-ordered with instant beta access. While we don't like the idea of pre-orders, getting access to the beta right away is a decent way to do it. Sadly, their Kickstarter campaign actually failed which I didn't notice. Making sure that wasn't the end of it, the developer Vox Games decided to go the Early Access route. They weren't left out in the cold of space though, as they also recently announced that Indie DB will be publishing their game. Under the label of Modularity, this will be the first title published by Indie DB.
  • Heroes of Newerth drops support for Linux and Mac
    Heroes of Newerth, the MOBA originally from S2 Games which is now handled by Frostburn Studios has dropped Linux and Mac support. [...] I'll be honest here, I couldn't care less about it personally. The last time i tried it, it was the single most toxic experience I've ever had in an online game. I've played a lot of online games and even so it was still at a level I had not seen before. I tried to go back to it a few times, never with a happy ending. Still, sad for any remaining Linux (and Mac) fans of the game. Looking over some statistics, it's not popular with viewers either. Around 180 on Twitch compared with nearly 100K for League of Legends and over 50K for Dota 2.
  • Unity 2018.3 With HDR Render Pipeline Preview, Updated PhysX & More
    Unity Tech is ending out the year with their Unity 2018.3 game engine update that brings a number of new features and improvements to its many supported platforms.

Wine 4.0 Release Candidate 2

  • Wine Announcement
    The Wine development release 4.0-rc2 is now available. What's new in this release (see below for details): - Bug fixes only, we are in code freeze.
  • Just when you think you can stop drinking, Wine 4.0 has another release candidate available
    Just before the weekend hits you in the face like a bad hangover when you realise it's Monday already, there's another bottle of Wine ready for you. Of course, we're not talking about the tasty liquid! Put down the glass, it's the other kind of Wine. The one used to run your fancy Windows programs and games on Linux. Doing their usual thing, developer Alexandre Julliard announced that the Wine 4.0 Release Candidate 2 is officially out the door today. While this release is nothing spectacular it is an important one, the more bugs they're able to tick off the list the better the 4.0 release will be for more people to use it.

Android Leftovers

A Look At The Clear Linux Performance Over The Course Of 2018

With the end of the year quickly approaching, it's time for our annual look at how the Linux performance has evolved over the past year from graphics drivers to distributions. This year was a particularly volatile year for Linux performance due to Spectre and Meltdown mitigations, some of which have at least partially recovered thanks to continued optimizations landing in subsequent kernel releases. But on the plus side, new releases of Python, PHP, GCC 8, and other new software releases have helped out the performance. For kicking off our year-end benchmark comparisons, first up is a look at how Intel's performance-optimized Clear Linux distribution evolved this year. For getting a look at the performance, on four different systems (two Xeon boxes, a Core i5, and Core i7 systems), the performance was compared from Clear Linux at the end of 2017 to the current rolling-release state as of this week. Read more