Wayland would replace X11 in the future (maybe soon?), we're researching/learning Wayland. And I planed to try a tiny Window Manager of Wayland for a practice. It's meaningful I think, since there's little independent WM for Wayland, except for Mutter which is a part of Gnome desktop environment.

Looking for hackers with the skills:

wayland c git

This project is part of:

Hack Week 10

Activity

  • over 10 years ago: yac disliked this project.
  • about 12 years ago: vdziewiecki liked this project.
  • about 12 years ago: yac liked this project.
  • about 12 years ago: NalaGinrut added keyword "wayland" to this project.
  • about 12 years ago: NalaGinrut added keyword "c" to this project.
  • about 12 years ago: NalaGinrut added keyword "git" to this project.
  • about 12 years ago: NalaGinrut originated this project.

  • Comments

    Be the first to comment!

    Similar Projects

    ReFrame: Yet another Wayland remote desktop. by AZhou

    Description

    I've created a DRM framebuffer based remote desktop called ReFrame, it supports use cases that other current solutions won't work. In this Hack Week I'd like to add some features to it and fix some bugs.

    Goals

    • (DONE) Add remote cursor: Typically cursor is drawn on cursor DRM plane, we need to capture it and draw it at correct position.
    • (WORKSNOW) Fix crash on KDE Plasma: Last week I found if I log into KDE Plasma with GDM on my system, it will crash. This does not happen with GNOME, I need to fix it.

    Got some new idea and implemented

    • (DONE) We can query DRM file for EGL Device to determine which one should be used to decode framebuffer, so user won't need to manually set it.
    • (DONE) We can iterator all DRM cards and connectors to find the first connected connector and use it, so in the best case (only 1 monitor) user doesn't need to modify the config.
    • (DONE) TTY now can be correctly captured with NVIDIA GPUs.

    Resources


    Add a machine-readable output to dmidecode by jdelvare

    Description

    There have been repeated requests for a machine-friendly dmidecode output over the last decade. During Hack Week 19, 5 years ago, I prepared the code to support alternative output formats, but didn't have the time to go further. Last year, Jiri Hnidek from Red Hat Linux posted a proof-of-concept implementation to add JSON output support. This is a fairly large pull request which needs to be carefully reviewed and tested.

    Goals

    Review Jiri's work and provide constructive feedback. Merge the code if acceptable. Evaluate the costs and benefits of using a library such as json-c.


    pudc - A PID 1 process that barks to the internet by mssola

    Description

    As a fun exercise in order to dig deeper into the Linux kernel, its interfaces, the RISC-V architecture, and all the dragons in between; I'm building a blog site cooked like this:

    • The backend is written in a mixture of C and RISC-V assembly.
    • The backend is actually PID1 (for real, not within a container).
    • We poll and parse incoming HTTP requests ourselves.
    • The frontend is a mere HTML page with htmx.

    The project is meant to be Linux-specific, so I'm going to use io_uring, pidfs, namespaces, and Linux-specific features in order to drive all of this.

    I'm open for suggestions and so on, but this is meant to be a solo project, as this is more of a learning exercise for me than anything else.

    Goals

    • Have a better understanding of different Linux features from user space down to the kernel internals.
    • Most importantly: have fun.

    Resources


    x64id: An x86/x64 instruction disassembler by m.crivellari

    Description

    This is an old side project. An x86/x64 machine code decoder. It is useful to get instructions' length and identify each of its fields.

    Example:

    C7 85 68 FF FF FF 00 00 00 00

    This is the instruction:

    MOV DWORD PTR SS:[LOCAL.38],0

    What follows are some of the information collected by the disassembler, based on the specific instruction:

    RAW bytes (hex): C7 85 68 FF FF FF 00 00 00 00
    Instr. length: 10
    Print instruction fields:
            Located Prefixes 0:
    
            OP: 0xC7
            mod_reg_rm: 0x85
            disp (4): 0xFFFFFF68
            Iimm: 0x0
    

    Lacks the mnemonic representation: from the previous machine code is not able to produce the "MOV..." instruction, for example.

    Goals

    The goal is almost easy: partially implement the mnemonic representation. I have already started during the weekend, likely tomorrow I will push the branch!

    Resources

    Progress

    Let's consider this example:

    [...other bytes...] 43 89 44 B5 00 01 00 [...other bytes...]
    


    Improve the picotm Transaction Manager by tdz

    Picotm is a system-level transaction manager. It provides transactional semantics to low-level C operations, such as

    • memory access,
    • modifying data structures,
    • (some) file I/O, and
    • common interfaces from the C Standard Library and POSIX.

    Picotm also handles error detection and recovery for all it's functionality. It's fully modular, so new functionality can be added.

    For the Hackweek, I want to dedicate some time to picotm. I want to finish some of the refactoring work that I have been working on. If there's time left, I'd like to investigate two-phase commits and how to support them in picotm.

    Picotm is available at http://picotm.org/.


    Port OTPClient to GTK >= 4.18 by pstivanin

    Project Description

    OTPClient is currently using GTK3 and cannot easily be ported to GTK4. Since GTK4 came out, there have been quite some big changes. Also, there are now some new deprecation that will take effect with GTK5 (and are active starting from 4.10 as warnings), so I need to think ahead and port OTPClient without using any of those deprecated features.

    Goal for this Hackweek

    • fix the last 3 opened issues (https://github.com/paolostivanin/OTPClient/issues/402, https://github.com/paolostivanin/OTPClient/issues/404, https://github.com/paolostivanin/OTPClient/issues/406) and release a new version
    • continue the rewrite from where we left last year
    • if possible, finally close this 6 years old issue: https://github.com/paolostivanin/OTPClient/issues/123


    git-fs: file system representation of a git repository by fgonzalez

    Description

    This project aims to create a Linux equivalent to the git/fs concept from git9. Now, I'm aware that git provides worktrees, but they are not enough for many use cases. Having a read-only representation of the whole repository simplifies scripting by quite a bit and, most importantly, reduces disk space usage. For instance, during kernel livepatching development, we need to process and analyze the source code of hundreds of kernel versions simultaneously.This is rather painful with git-worktrees, as each kernel branch requires no less than 1G of disk space.

    As for the technical details, I'll implement the file system using FUSE. The project itself should not take much time to complete, but let's see where it takes me.

    I'll try to keep the same design as git9, so the file system will look something like:

    
    /mnt/git
          +-- ctl
          +-- HEAD
          |    +-- tree
          |    |    +--files
          |    |    +--in
          |    |    +--head
          |    |
          |    +-- hash
          |    +-- msg
          |    +-- parent
          |
          +-- branch
          |      |
          |      +-- heads
          |      |      +-- master
          |      |            +-- [commit files, see HEAD]
          |      +-- remotes
          |             +-- origin
          |                     +-- master
          |                            +-- [commit files, see HEAD]
          +-- object
                +-- 00051fd3f066e8c05ae7d3cf61ee363073b9535f # blob contents
                +-- 00051fd3f066e8c05ae7d3cf61ee363073b9535c
                      +-- [tree contents, see HEAD/tree]
                +-- 3f5dbc97ae6caba9928843ec65fb3089b96c9283
                      +-- [commit files, see HEAD]
    

    So, if you wanted to look at the commit message of the current branch, you could simply do:

    cat /mnt/git/HEAD/msg 

    No collaboration needed. This is a solo project.

    Goals

    • Implement a working prototype.

    • Measure and improve the performance if possible. This step will be the most crucial one. User space filesystems are slower by nature.

    Resources

    https://orib.dev/git9.html

    https://docs.kernel.org/filesystems/fuse/fuse.html


    go-git: unlocking SHA256-based repository cloning ahead of git v3 by pgomes

    Description

    The go-git library implements the git internals in pure Go, so that any Go application can handle not only Git repositories, but also lower-level primitives (e.g. packfiles, idxfiles, etc) without needing to shell out to the git binary.

    The focus for this Hackweek is to fast track key improvements for the project ahead of the upstream release of Git V3, which may take place at some point next year.

    Goals

    Stretch goals

    Resources

    • https://github.com/go-git/go-git/
    • https://go-git.github.io/docs/


    Create a page with all devel:languages:perl packages and their versions by tinita

    Description

    Perl projects now live in git: https://src.opensuse.org/perl

    It would be useful to have an easy way to check which version of which perl module is in devel:languages:perl. Also we have meta overrides and patches for various modules, and it would be good to have them at a central place, so it is easier to lookup, and we can share with other vendors.

    I did some initial data dump here a while ago: https://github.com/perlpunk/cpan-meta

    But I never had the time to automate this.

    I can also use the data to check if there are necessary updates (currently it uses data from download.opensuse.org, so there is some delay and it depends on building).

    Goals

    • Have a script that updates a central repository (e.g. https://src.opensuse.org/perl/_metadata) with metadata by looking at https://src.opensuse.org/perl/_ObsPrj (check if there are any changes from the last run)
    • Create a HTML page with the list of packages (use Javascript and some table library to make it easily searchable)

    Resources

    Results

    Day 1

    Day 2

    • HTML Page has now links to src.opensuse.org and the date of the last update, plus a short info at the top
    • Code is now 100% covered by tests: https://app.codecov.io/gh/perlpunk/opensuse-perl-meta
    • I used the modern perl class feature, which makes perl classes even nicer and shorter. See example
    • Tests
      • I tried out the mocking feature of the modern Test2::V0 library which provides call tracking. See example
      • I tried out comparing data structures with the new Test2::V0 library. It let's you compare parts of the structure with the like function, which only compares the date that is mentioned in the expected data. example

    Day 3

    • Added various things to the table
      • Dependencies column
      • Show popup with info for cpanspec, patches and dependencies
      • Added last date / commit to the data export.

    Plan: With the added date / commit we can now daily check _ObsPrj for changes and only fetch the data for changed packages.

    Day 4


    Mail client with mailing list workflow support in Rust by acervesato

    Description

    To create a mail user interface using Rust programming language, supporting mailing list patches workflow. I know, aerc is already there, but I would like to create something simpler, without integrated protocols. Just a plain user interface that is using some crates to read and create emails which are fetched and sent via external tools.

    I already know Rust, but not the async support, which is needed in this case in order to handle events inside the mail folder and to send notifications.

    Goals

    • simple user interface in the style of aerc, with some vim keybindings for motions and search
    • automatic run of external tools (like mbsync) for checking emails
    • automatic run commands for notifications
    • apply patch set from ML
    • tree-sitter support with styles

    Resources

    • ratatui: user interface (https://ratatui.rs/)
    • notify: folder watcher (https://docs.rs/notify/latest/notify/)
    • mail-parser: parser for emails (https://crates.io/crates/mail-parser)
    • mail-builder: create emails in proper format (https://docs.rs/mail-builder/latest/mail_builder/)
    • gitpatch: ML support (https://crates.io/crates/gitpatch)
    • tree-sitter-rust: support for mail format (https://crates.io/crates/tree-sitter)