Skip to content
Menu
Open World News Open World News
  • Privacy Policy
Open World News Open World News

Drupal blog: Drupal 10.0.0 is available

Posted on December 16, 2022 by Michael G

Thanks to 2129 contributors from 616 organizations resolving 4083 issues in the past two and a half years, Drupal 10.0.0 is available today! This new version sets Drupal up for continued stability and security for the longer term. All new features will be added to Drupal 10 going forward.

What’s new in Drupal 10.0.0?

Better looking on the frontend and backend

The new Olivero theme provides a modern look and feel. Olivero includes built-in support for multi-level menus and listings in responsive grids. The new administration theme, Claro, provides an accessible, clean interface for site management. The prior default themes Bartik and Seven are available as contributed projects if you wish to use them.

Drupal blog: Drupal 10.0.0 is available

CKEditor 5 is the new content editor

With CKEditor 4 reaching end of life at the end of 2023, it was time to upgrade. Thanks to a fantastic collaboration with its developers, Drupal 10 comes with CKEditor 5 built-in. The new version brings a modern editing experience with in-place controls and support for arbitrary input and output formats. Optional premium features are also available, such as live collaborative editing. An upgrade path is provided to move editor settings over and developer tools are available to help port any custom integrations. For now, CKEditor 4 is also available as a contributed project, so you can continue using that for Drupal 10 for now until its end of support.

CKEditor 5 feature highlights

Internet Explorer support is removed

Microsoft has ended support for Internet Explorer and so has Drupal.This allows Drupal themes to use modern solutions for user facing problems.

Responsive grids in views

Views now supports a responsive grid display format. Instead of specifying the number of columns, and screen widths, users specify the maximum number of columns, the minimum grid cell width and the gutter spacing. When the grid cells resize to a point where they’re below the minimum width, the grid will reflow to have less columns. Alternatively, the grid will expand to fit in as many columns as permitted, while keeping the grid width above the minimum value. Dropping Internet Explorer 11 support enabled the addition of this feature.

Starterkit theme generation tool

Drupal 10 introduces a new command line tool to generate a standalone theme from a compatible base theme. We recommend using the tool to prevent breaking a sub-theme when the base theme changes. Runtime theme extension is still supported, but only advised if you have full control of the base theme (e.g. by creating it with the starterkit command).

Requires Symfony 6.2 and PHP 8.1

Drupal 10.0 depends on the Symfony 6.2 framework, and later Drupal 10 minor versions will be updated to future minor versions of Symfony 6. This sets Drupal up with the latest version of the underlying platform.

As PHP 7 reached end of life on November 28, 2022, it was clear Drupal 10 must require at least PHP 8. Symfony 6.2 requires PHP 8.1 and choosing that version provides the best support timeline for Drupal 10 itself as well. PHP 8.2 is also fully supported.

Non-essential features removed

The QuickEdit, Aggregator, HAL, RDF, and Color modules have been removed from core. They are available as contributed projects. This allows Drupal 10 to focus on the core strengths of the system.

All features added since Drupal 9.0 are still here

Drupal 10.0.0 includes all of the features that were added to Drupal since 9.0, such as lazy image loading support for better frontend performance, WebP support in image styles, a dedicated Content Editor user role, “Manage permissions” tabs for entity bundles, and bundle classes on the PHP level for better code encapsulation, among many other improvements.

Thousands of contributed projects ready at launch

Thanks to the diligent work of the Drupal community on automated code update tools, porting events and dedicated work on key projects over the past two and a half years, Drupal 10 launches with almost three thousand compatible extensions, 26% more than how many Drupal 9 launched with.

The future of Drupal 10

All new features will be added to only Drupal 10 going forward. Several key improvements are already in the works as contributed projects. The Project Browser contributed project is now in beta and includes a Composer-based user interface to install contributed projects with all their dependencies. The Automatic Updates contributed project is already stable, allowing you to apply patch-level core updates to your site. (Experimental support is included for minor version updates and contributed project updates). The Recipes initiative is less far along but already has early versions of automation functionality to ship composable bundles of Drupal modules and configuration.

All of these are planned to be added to Drupal 10 core in the future and will help users find, keep up with and combine all the fantastic contributed projects the Drupal community is famous for.

What does this release mean for me?

Visual of support timelines of Drupal minor releases

Drupal 9 site owners

Drupal 9 will reach end-of-life alongside two of its key components (Symfony 4 and CKEditor 4 on November 1, 2023. (There is a small chance that a final security release of Drupal 9 could be issued between November 1 and November 30, 2023 if one of these dependencies chooses to do so as well.)

Upgrades to Drupal 10 are supported from Drupal 9.4 and 9.5. However, Drupal 9.4 will no longer receive normal bugfixes. For continued bugfix support, Drupal 9 users should update to Drupal 9.5 now.

Drupal 9.4 and 9.5 will both receive security fixes until the release of 10.1 on June 21, 2023. After that date, Drupal 9.5 will be the only Drupal 9 version to receive security fixes until the November 2023 end-of-life.

Drupal 8 site owners

Drupal 8 is end of life as of November 17, 2021. There is no direct upgrade path to Drupal 10 from Drupal 8, so you will need to first upgrade from Drupal 8 to Drupal 9. There are disclosed security issues with Drupal core that are not fixed in any Drupal 8 version, so if you have not yet upgraded to Drupal 9, do so as soon as possible.

Drupal 7 site owners

Drupal 7 support was extended until November 1, 2023, and it will continue to receive bug and security fixes throughout this time. The migration path for Drupal 7 sites to Drupal 10 is stable. Choose which Drupal major version to update to based on your project timeline. Read more about the migration to Drupal 10.

Module, theme and translation contributors

Drupal 10 removes deprecated APIs. Use Upgrade Status on Drupal 9 to check your custom modules and themes for the changes needed. Upgrade Status will also give suggestions on automating the fixes.

Translators should check localize.drupal.org for any untranslated strings.

The Basics of Receiving Webhooks in Rails

Posted on December 16, 2022 by Michael G
Let’s take a look at the most simple, straightforward way to receive webhooks in a Ruby on Rails application.

Cloud Hypervisor Project Welcomes Ampere Computing as a Member

Posted on December 16, 2022 by Michael G

Cloud Hypervisor Project Welcomes Ampere Computing as a MemberRead the original post at: Read More 

The post Cloud Hypervisor Project Welcomes Ampere Computing as a Member appeared first on Linux.com.

A state-by-state look at the long-reads that captivated Pocket users in 2022

Posted on December 16, 2022 by Michael G

Every year, the top stories that were saved and read by Pocket’s more than 10 million users clue us in to the prevailing mood of the time. In 2020, readers looked for answers in The Atlantic’s exploration of how the pandemic might end. In 2021, The New York Times’ piece on “languishing” captured what we […]

The post A state-by-state look at the long-reads that captivated Pocket users in 2022 appeared first on The Mozilla Blog.

Andy Wingo: ephemeral success

Posted on December 16, 2022 by Michael G

Good evening, patient hackers 🙂 Today finishes off my series on
implementing ephemerons in a garbage
collector
.

Last time, we had a working solution for ephemerons, but it involved
recursively visiting any pending ephemerons from within the copy
routine—the bit of a semi-space collector that is called when
traversing the object graph and we see an object that we hadn’t seen
yet. This recursive visit could itself recurse, and so we could
overflow the control stack.

The solution, of course, is “don’t do that”: instead of visiting
recursively, enqueue the ephemeron for visiting later. Iterate, don’t
recurse. But here we run into a funny problem: how do we add an
ephemeron to a queue or worklist? It’s such a pedestrian question
(“just… enqueue it?”) but I think it illustrates some of the
particular concerns of garbage collection hacking.

speak, memory

The issue is that we are in the land of “can’t use my tools because I
broke my tools with my tools”. You can’t make a standard List<T>
because you can’t allocate list nodes inside the tracing routine: if you
had memory in which you could allocate, you wouldn’t be calling the
garbage collector.

If the collector needs a data structure whose size doesn’t depend on the
connectivity of the object graph, you can pre-allocate it in a reserved
part of the heap. This adds memory overhead, of course; for a 1000 MB
heap, say, you used to be able to make graphs 500 MB in size (for a
semi-space collector), but now you can only do 475 MB because you have
to reserve 50 MB (say) for your data structures. Another way to look at
it is, if you have a 400 MB live set and then you allocate 2GB of
garbage, if your heap limit is 500 MB you will collect 20 times, but if
it’s 475 MB you’ll collect 26 times, which is more expensive. This is
part of why GC algorithms are so primitive; implementors have to
be stingy that we don’t get to have nice things / data structures.

However in the case of ephemerons, we will potentially need one worklist
entry per ephemeron in the object graph. There is no optimal fixed size
for a worklist of ephemerons. Most object graphs will have no or few
ephemerons. Some, though, will have practically the whole heap.

For data structure needs like this, the standard solution is to reserve
the needed space for a GC-managed data structure in the object itself. For
example, for concurrent copying collectors, the GC might reserve a word
in the object for a forwarding pointer, instead of just clobbering the
first word. If you needed a GC-managed binary tree for a specific kind
of object, you’d reserve two words. Again there are strong pressures to
minimize this overhead, but in the case of ephemerons it seems sensible
to make them pay their way on a per-ephemeron basis.

so let’s retake the thing

So sometimes we might need to put an ephemeron in a worklist. Let’s add
a member to the ephemeron structure:

struct gc_ephemeron {
  struct gc_obj header;
  int dead;
  struct gc_obj *key;
  struct gc_obj *value;
  struct gc_ephemeron *gc_link; // *
};

Incidentally this also solves the problem of how to represent the
struct gc_pending_ephemeron_table; just reserve 0.5% of the heap or so
as a bucket array for a buckets-and-chains hash table, and use the
gc_link as the intrachain links.

struct gc_pending_ephemeron_table {
  struct gc_ephemeron *resolved;
  size_t nbuckets;
  struct gc_ephemeron buckets[0];
};

An ephemeron can end up in three states, then:

  1. Outside a collection: gc_link can be whatever.

  2. In a collection, the ephemeron is in the pending ephemeron table: gc_link is part of a hash table.

  3. In a collection, the ephemeron’s key has been visited, and the ephemeron is on the to-visit worklist; gc_link is part of the resolved singly-linked list.

Instead of phrasing the interface to ephemerons in terms of visiting
edges in the graph, the verb is to resolve ephemerons. Resolving an
ephemeron adds it to a worklist instead of immediately visiting any
edge.

struct gc_ephemeron **
pending_ephemeron_bucket(struct gc_pending_ephemeron_table *table,
                         struct gc_obj *key) {
  return &table->buckets[hash_pointer(obj) % table->nbuckets];
}

void add_pending_ephemeron(struct gc_pending_ephemeron_table *table,
                           struct gc_obj *key,
                           struct gc_ephemeron *ephemeron) {
  struct gc_ephemeron **bucket = pending_ephemeron_bucket(table, key);
  ephemeron->gc_link = *bucket;
  *bucket = ephemeron;
}

void resolve_pending_ephemerons(struct gc_pending_ephemeron_table *table,
                                struct gc_obj *obj) {
  struct gc_ephemeron **link = pending_ephemeron_bucket(table, obj);
  struct gc_ephemeron *ephemeron;
  while ((ephemeron = *link)) {
    if (ephemeron->key == obj) {
      *link = ephemeron->gc_link;
      add_resolved_ephemeron(table, ephemeron);
    } else {
      link = &ephemeron->gc_link;
    }
  }
}

Copying an object may add it to the set of pending ephemerons, if it is
itself an ephemeron, and also may resolve other pending ephemerons.

void resolve_ephemerons(struct gc_heap *heap, struct gc_obj *obj) {
  resolve_pending_ephemerons(heap->pending_ephemerons, obj);

  struct gc_ephemeron *ephemeron;
  if ((ephemeron = as_ephemeron(forwarded(obj)))
      && !ephemeron->dead) {
    if (is_forwarded(ephemeron->key))
      add_resolved_ephemeron(heap->pending_ephemerons,
                             ephemeron);
    else
      add_pending_ephemeron(heap->pending_ephemerons,
                            ephemeron->key, ephemeron);
  }
}

struct gc_obj* copy(struct gc_heap *heap, struct gc_obj *obj) {
  ...
  resolve_ephemerons(heap, obj); // *
  return new_obj;
}

Finally, we need to add something to the core collector to scan resolved
ephemerons:

int trace_some_ephemerons(struct gc_heap *heap) {
  struct gc_ephemeron *resolved = heap->pending_ephemerons->resolved;
  if (!resolved) return 0;
  heap->pending_ephemerons->resolved = NULL;
  while (resolved) {
    resolved->key = forwarded(resolved->key);
    visit_field(&resolved->value, heap);
    resolved = resolved->gc_link;
  }
  return 1;
}

void kill_pending_ephemerons(struct gc_heap *heap) {
  struct gc_ephemeron *ephemeron;
  struct gc_pending_ephemeron_table *table = heap->pending_ephemerons;
  for (size_t i = 0; i < table->nbuckets; i++) {
    for (struct gc_ephemeron *chain = table->buckets[i];
         chain;
         chain = chain->gc_link)
      chain->dead = 1;    
    table->buckets[i] = NULL;
  }
}

void collect(struct gc_heap *heap) {
  flip(heap);
  uintptr_t scan = heap->hp;
  trace_roots(heap, visit_field);
  do { // *
    while(scan < heap->hp) {
      struct gc_obj *obj = scan;
      scan += align_size(trace_heap_object(obj, heap, visit_field));
    }
  } while (trace_ephemerons(heap)); // *
  kill_pending_ephemerons(heap); // *
}

The result is… not so bad? It makes sense to make ephemerons pay
their own way in terms of memory, having an internal field managed by
the GC. In fact I must confess that in the implementation I have been
woodshedding, I actually have three of these damn things; perhaps more
on that in some other post. But the perturbation to the core algorithm
is perhaps less than the original code. There are still some
optimizations to make, notably postponing hash-table lookups until the
whole strongly-reachable graph is discovered; but again, another day.

And with that, thanks for coming along with me for my journeys into
ephemeron-space.

I would like to specifically thank Erik Corry and Steve Blackburn for
their advice over the years, and patience with my ignorance; I can only
imagine that it’s quite amusing when you have experience in
a domain to see someone new and eager come in and make many of the
classic mistakes. They have both had a kind of generous parsimony in
the sense of allowing me to make the necessary gaffes but also providing
insight where it can be helpful.

I’m thinking of many occasions but I especially appreciate the advice to
start with a semi-space collector when trying new things, be it
benchmarks or test cases or API design or new functionality, as it’s a
simple algorithm, hard to get wrong on the implementation side, and
perfect for bringing out any bugs in other parts of the system. In this
case the difference between fromspace and tospace pointers has a
material difference to how you structure the ephemeron implementation;
it’s not something you can do just in a trace_heap_object function, as
you don’t have the old pointers there, and the pending ephemeron table
is indexed by old object addresses.

Well, until some other time, gentle hackfolk, do accept my sincerest waste
disposal greetings. As always, yours in garbage, etc.,

Update to app descriptions

Posted on December 16, 2022 by Michael G

F-Droid aims to give app developers a nice way to present their apps to
users. Each app can include descriptions, related metadata, and
translations.
We have just updated the list of HTML formatting tags that are allowed in
app descriptions to make it clearer what works and what does not. This
should make it easier to sync the description texts with other app stores
that also allow some HTML. There are two key
changes to
the website generation:

  • Disallowed HTML tags are now automatically removed (“stripped”), whereas
    before they were escaped (e.g. &lt;script&gt;).
  • The list of allowed tags
    is now strictly enforced.

This change was prompted by some security
issues in Loofah, the tool
we rely on to strip dangerous HTML from the app descriptions. f-droid.org
uses multiple layers of defense, that greatly limits the scope of security
vulnerabilities. For example, this site includes a Content Security
Policy

that disables the most dangerous features, and
limits the rest to
URLs that are part of this site.

For those interested in the technical details: HTML allows data blobs to be
included inline via the data: scheme. That can then be abused to load
malicious things. Loofah was not properly handling those. This site’s
Content Security Policy already disallows all uses of data:, so it was not
an issue here. The self keyword means “only allow resources from the
current
origin
”,
and that is https://f-droid.org.

How to get hulu on tv 151O-37O-1986

Posted on December 15, 2022 by Michael G

Video by via Dailymotion Source You can watch Hulu on your TV using an app or browser, a casting device, a smart HDTV, or even hooking up a computer to the TV.Google Chromecast, Roku, Apple TV, and Amazon Fire Stick all work with Hulu. For more info: 151O-37O-1986 Dial Now #hulutvsetup#hulutv#howtogethulutv Go to Source

War and Peace Russian movie with English subtitles , Part One | BASED ON LEO TOLSTOY NOVEL

Posted on December 15, 2022 by Michael G

Video by via Dailymotion Source All thoughts that have huge consequences are always simple. My whole idea is that if vicious people are interconnected and make up strength, then honest people need to do the same,” – with these words of Leo Tolstoy epic picture “War and Peace” begins. Film tells about the life of…

Bangun Sinergitas TNI AL Jadikan Katinim Kampung Bahari Nusantara

Posted on December 15, 2022 by Michael G

Video by via Dailymotion Source SORONG, KOMPAS.TV – Kampung Bahari Nusantara merupakan program TNI Angkatan Laut, dimana program ini sudah dilaksanakan di seluruh wilayah oleh Panglima atau Komandan Pangkalan di seluruh jajaran TNI Angkatan Laut, dengan tujuan untuk meningkatkan kesejahteraan masyarakat di bidang Kesehatan, Pendidikan, Pariwisata, Ekonomi serta Pertahanan. Pencanangan Desa Binaan TNI Angkatan Laut,…

Pune: Banarasi Saree themed icing cake baked by cake artist Prachi Deb for Cake Project, in Italy

Posted on December 15, 2022 by Michael G

Video by via Dailymotion Source पुण्यातील आंतरराष्ट्रीय ख्यातीच्या केक कलाकार प्राची धबल देब यांनी नुकतेच ‘बनारसी साज’ संकल्पनेवर आधरित भव्य असा आयसिंग केक तयार केला आहे. इटली येथील इंटरनॅशनल केक प्रोजेक्ट’साठी हा भव्य केक तयार करण्यात आला आहे. या प्रॉजेक्टसाठी जगभरातून केक कलाकारांना आमंत्रित करण्यात आले होते. त्यात पुण्यातून प्राची यांना आमंत्रित करण्यात आले होते….

  • Previous
  • 1
  • …
  • 1,278
  • 1,279
  • 1,280
  • 1,281
  • 1,282
  • 1,283
  • 1,284
  • …
  • 1,531
  • Next

Recent Posts

  • Open Source email Clients
  • When and how to use benchmarking
  • How Plotly AI revolutionizes the dashboard development process
  • [TUT] LoRa & LoRaWAN – MikroTik wAP LR8 kit mit The Things Network verbinden [4K | DE]
  • Mercado aguarda Powell e olha Trump, dados e Haddad | MINUTO TOURO DE OURO – 11/02/25

Categories

  • Android
  • Linux
  • News
  • Open Source
©2025 Open World News | Powered by Superb Themes
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
Cookie SettingsAccept All
Manage consent

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
CookieDurationDescription
cookielawinfo-checkbox-analytics11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional11 monthsThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy11 monthsThe cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytics
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
Others
Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
SAVE & ACCEPT