SlideShare a Scribd company logo
Exploits of the
Snapcraft Ninja
Dani Llewellyn (diddledani) she/her
08/11/2022 Dani Llewellyn 2
My Background
●
Linux user since ~1997-8
●
Web, Desktop, and Server dev/admin experience
●
Windows, macOS, and Linux
●
Single System Image Beowulf-style clustering ~2001-5 (OpenMosix)
●
Ran Gentoo for a decade learning a LOT
●
Learned high-availability techniques via tools like CoroSync and Pacemaker
●
Have since forgotten it all 😛
●
Used Docker and containerisation since Docker first appeared
●
Primary contributions to Snaps/Snapcraft, WSL2, and Ubuntu Mate
●
Featured multiple times on the Ubuntu.com Blog
●
Ubuntu Member February 2018
●
Ubuntu Membership Board September 2018-present
●
Microsoft MVP primarily for WSL-related community work
08/11/2022 Dani Llewellyn 3
Snap Packages
●
Avidly followed Ubuntu Touch efforts
●
Loved the advocacy streams by Alan Pope et al
●
Excited by the Click Packaging system
●
Backed the Ubuntu Edge campaign on Indiegogo
●
Snaps arose like a phoenix from the ashes of UT
●
Just as exciting as Click Packages, and for more than just
phones
●
Cue my jumping in to start experimenting...
08/11/2022 Dani Llewellyn 4
First steps with Snap Packaging
●
Started out simple with a package for HexChat IRC Client
●
Handed-off to upstream developers
●
Began learning how desktop stack fits together
●
Spread my wings further to look at other desktop apps
●
My understanding of the desktop stack continually improving…
●
Packaged several games, including
●
OpenRA (Open-source Command & Conquer engine reimplementation)
●
OpenTTD (Open-source Transport Tycoon Deluxe engine reimplementation)
●
SuperTuxKart (Similar to Super Mario Kart)
●
Micropolis (Open-source release of Sim City by the copyright holder for the One Laptop per Child
project)
●
And others...
08/11/2022 Dani Llewellyn 5
Fully committed?
08/11/2022 Dani Llewellyn 6
Yup, fully committed!
●
After cutting my teeth on more simple desktop apps I wanted more of a
challenge
●
So I bit off a huge chunk with the GNU Image Manipulation Program
●
This app is a monster package!
●
Many dependencies that need to mesh just right
●
At the time, and for the stable branch still, GTK2-based
●
GTK2 was already legacy and no examples existed within the Snap community
●
Yup, I learnt a LOT more about the desktop stack here, too
●
Still principle maintainer via the Snapcrafters project
08/11/2022 Dani Llewellyn 7
How many Snaps?
●
Lots! 125 repositories related to Snapcrafting – not all of these are
package but more are.
08/11/2022 Dani Llewellyn 8
Snapstats
●
I’ve been running snapstats.org for some time now
cataloguing the Snap Store
●
Unfortunately the scraping is now unpredictable – The Store
is returning inconsistent numbers on repeated runs
●
The site was an attempt at maintaining a third-party list of
available Snap Packages in the Store along with some basic
statistics like number of packages over time and which how
many packages per architecture over time
08/11/2022 Dani Llewellyn 9
Screenshots – The graphs went wonky in
February 2022 🤦‍♀️
08/11/2022 Dani Llewellyn 10
Snapcraft Summits
●
My GNU Image Manipulation Program snap, along with my other snaps and wider activities
in the ecosystem, brought attention from the Snap Advocacy team (Alan Pope and Martin
Wimpress)
●
They invited me to the Snapcraft Summit in Seattle in February 2018
●
The summits are organised hackathons where Canonical engineers work with developers from other
organisations and open source projects to get their respective apps working inside Snap Packages
●
Previous wins include the launch of Spotify as a Snap Package during a summit
●
I mentioned I was working on a package for PowerShell Core so they organised for Travis Plunk
from Microsoft to join us where we worked in partnership to bring a first-party snap of PowerShell
Core to the store
●
I contributed fixes to PowerShell Core to ensure that features of PowerShell that assumed non-
immutable filesystem were functional
●
One such example being the telemetry opt-out mechanism that relied on a file being created alongside the
pwsh executable, which isn’t possible in a Snap Package due to the immutable filesystem
08/11/2022 Dani Llewellyn 11
So I’m a trusted expert now?
●
Canonical employees regularly request my
expertise
●
Several blog posts featuring my insights on
Ubuntu.com
●
Star Developer on the Snap Store
●
Core member of the Snapcrafters project
●
Well known and trusted within the
community
08/11/2022 Dani Llewellyn 12
What else have I contributed?
08/11/2022 Dani Llewellyn 13
Background: About Snapcraft Extensions
●
In the past there were “cloud parts”
●
Magic “parts” that you could declare your dependence upon
●
When depending on a “cloud part” in your snapcraft.yaml the cloud would be pulled
and built first
●
Authorable by anybody
●
Not scalable due to implementation
●
Now there are Snapcraft Extensions
●
Similar to cloud parts in that they are natively supported by Snapcraft
●
Shipped as part of Snapcraft so requires a PR and approval and may be rejected
●
Scalability not really proven yet
●
So far only desktop-related and flutter extensions exist
08/11/2022 Dani Llewellyn 14
Why I want to replace Snapcraft Extensions
●
Snapcraft Extensions “just work”, so why invent something
new?
●
They ship within Snapcraft itself
●
Lead time till available is too long
●
PR approval is arbitrary and may not be granted
●
Must sign the Canonical Contributor License Agreement
08/11/2022 Dani Llewellyn 15
My idea and implementation
●
At their heart, Snapcraft Extensions merely augment the snapcraft.yaml before
using it to build your Snap Package
●
Let’s do the augmentation instead of Snapcraft
●
Enter sc-jsonnet: https://snapcraft.io/sc-jsonnet
●
Write your snapcraft.yaml in jsonnet instead of YAML
●
Use sc-jsonnet’s import capability to import remote jsonnet libraries
●
When you have a snapcraft.jsonnet file, generate the snapcraft.yaml before building
with Snapcraft:
$ sc-jsonnet -o snap/snapcraft.yaml
$ snapcraft
08/11/2022 Dani Llewellyn 16
Example snapcraft.jsonnet
local snapcraft = import 'snapcraft.libsonnet';
snapcraft {
name: "my-jsonnet-snap-name",
version: "0.1",
summary: "Single-line elevator pitch for your amazing snap",
description: "This is my-snap's description. You have a paragraph or two to tell the most important story about your
snap. Keep it under 100 words though, we live in tweetspace and your description wants to look good in the snap store.",
grade: "devel",
confinement: "devmode",
parts: {
"my-part": {
plugin: "nil",
},
},
}
08/11/2022 Dani Llewellyn 17
Adding a third-party extension to
snapcraft.jsonnet
local snapcraft = import 'snapcraft.libsonnet';
# import my ALSA extension
local alsa = import 'https://raw.githubusercontent.com/diddlesnaps/snapcraft-alsa/master/alsa.libsonnet';
snapcraft {
# removed for brevity – it’s identical to the example
# on the previous slide
} + alsa() # this is all you need to add beyond the import above
08/11/2022 Dani Llewellyn 18
Even better, extensions can take arguments
local snapcraft = import 'snapcraft.libsonnet';
# import my ALSA extension
local alsa = import 'https://raw.githubusercontent.com/diddlesnaps/snapcraft-alsa/master/alsa.libsonnet';
snapcraft {
# removed for brevity – it’s identical to the example
# on the previous slide
} + alsa("1.1.9")
# this builds ALSA version 1.1.9 from source instead of using the version
# from the Ubuntu package archive (via APT)
08/11/2022 Dani Llewellyn 19
Documentation and available extensions
●
Documentation for sc-jsonnet is available at
https://sc-jsonnet.readthedocs.io/en/latest/
●
I’ve written two libraries of extensions:
●
Snapcraft ALSA – A single extension to pipe ALSA output through
PulseAudio for more a less privileged Snap Package:
https://snapcraft-alsa.readthedocs.io/en/latest/
●
Snapcraft Utils Library – several extensions that perform common
tasks usually handled via Copy+Paste:
https://snapcraft-utils-library.readthedocs.io/en/latest/
08/11/2022 Dani Llewellyn 20
Any more?
08/11/2022 Dani Llewellyn 21
Snapcraft CI/CD pipelines
●
Don’t want to use the Snapcraft Build Service on snapcraft.io?
●
I’ve developed a build pipeline for both GitHub Actions and
GitLab CI
●
Uses my own OCI container image that can be used in any CI
system that allowed privileged mode execution of containers
●
i.e. launched via Docker CLI’s --privileged flag
●
See my other talk “Automated Snap Package build processes
without the Build Service” for full details
08/11/2022 Dani Llewellyn 22
Wrapping up… but first...
08/11/2022 Dani Llewellyn 23
Snapcraft skills for sale
●
I provide contracting services to anyone creating
Snap Packages of their apps
●
Multiple organisations have now benefited from my
expertise
●
Contact me via https://snapcraft.ninja/ to introduce
your project
08/11/2022 Dani Llewellyn 24
Acknowledgements
●
Martin Wimpress (@m_wimpress), Alan Pope (@popey), both alumni, and Igor (of the
Snap Advocacy team)
●
For recognising my capability and enthusiasm for the Snap Packaging world
●
For inviting me to Snapcraft Summits to share my knowledge and expertise
●
For encouraging me to get deeper into the Ubuntu Community, such as applying for Ubuntu Membership
●
Ubuntu Desktop Team, Snapcraft Team, and Snapd Team all at Canonical
●
For being receptive to my contributions and constantly encouraging my continued involvement
●
Sarah Dickinson (@dickinsonsarah7) formally head of Canonical PR
●
For featuring my thoughts about Snaps and other Canonical projects in multiple blog posts on Ubuntu.com
●
Heather Ellsworth (Ubuntu Desktop team; @linux_flower) and Monica Madon (former Ubuntu
Community Respresentative; @communiteatime)
●
For being excellent friends and providing constant encouragement and moral support, especially while I'm
trying to find work that is suitable for my talents
08/11/2022 Dani Llewellyn 25
Where to find me
●
https://snapcraft.ninja/
●
Ubuntu Discourse (diddledani)
●
Snapcraft Forum (diddledani)
●
https://github.com/diddlesnaps
●
https://github.com/diddledani
●
https://github.com/UbuntuAccomplishments
●
Twitter (@diddledani)
●
Mastodon (@diddledani@mastodon.lol)
●
Also: I’m currently looking for (more permanent) work 😉

More Related Content

PDF
Automated Snap Package build processes without the Build Service
PDF
My Journey From Early Linux, Through Snap Packaging, to WSL
PPTX
Java applications containerized and deployed
PDF
Python Experience in KKBOX Group
PDF
Headless Android
PPTX
Creating MuleSoft API Template Project Using Maven Archetype
PPTX
Mulesoft KL Meetup 2
PPTX
SharePoint Framework tips and tricks
Automated Snap Package build processes without the Build Service
My Journey From Early Linux, Through Snap Packaging, to WSL
Java applications containerized and deployed
Python Experience in KKBOX Group
Headless Android
Creating MuleSoft API Template Project Using Maven Archetype
Mulesoft KL Meetup 2
SharePoint Framework tips and tricks

Similar to Exploits of the Snapcraft Ninja (20)

PDF
Docker primer and tips
ODP
devops@cineca
PPTX
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
PDF
Keeping your build tool updated in a multi repository world
PDF
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...
PDF
Container Days
PDF
Unblocking The Main Thread Solving ANRs and Frozen Frames
PDF
Snap - the universal packaging format for linux distros
PDF
Angular based enterprise level frontend architecture
PDF
Docker workshop
PDF
Getting started within the Ubuntu Community
PDF
OpenStack Ironic: From Zero to “Pro”.pdf
PPTX
Drupal 7: More than a simple CMS
PPTX
Exploring Next Generation Buildpacks - Anand Rao & Scott Deeg
PDF
Buildpacks: the other way to build container images
PDF
Making your app soar without a container manifest
PDF
Choosing Drupal as your Content Management Framework
PDF
VASCAN - Docker and Security
PDF
Using Kubernetes to Provide Services
PDF
Java and Container - Make it Awesome !
Docker primer and tips
devops@cineca
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
Keeping your build tool updated in a multi repository world
ContainerDays NYC 2015: "Easing Your Way Into Docker: Lessons From a Journey ...
Container Days
Unblocking The Main Thread Solving ANRs and Frozen Frames
Snap - the universal packaging format for linux distros
Angular based enterprise level frontend architecture
Docker workshop
Getting started within the Ubuntu Community
OpenStack Ironic: From Zero to “Pro”.pdf
Drupal 7: More than a simple CMS
Exploring Next Generation Buildpacks - Anand Rao & Scott Deeg
Buildpacks: the other way to build container images
Making your app soar without a container manifest
Choosing Drupal as your Content Management Framework
VASCAN - Docker and Security
Using Kubernetes to Provide Services
Java and Container - Make it Awesome !
Ad

Recently uploaded (20)

PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
cuic standard and advanced reporting.pdf
PDF
Approach and Philosophy of On baking technology
PPT
Teaching material agriculture food technology
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Review of recent advances in non-invasive hemoglobin estimation
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
KodekX | Application Modernization Development
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Spectral efficient network and resource selection model in 5G networks
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
cuic standard and advanced reporting.pdf
Approach and Philosophy of On baking technology
Teaching material agriculture food technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Review of recent advances in non-invasive hemoglobin estimation
The AUB Centre for AI in Media Proposal.docx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Dropbox Q2 2025 Financial Results & Investor Presentation
KodekX | Application Modernization Development
The Rise and Fall of 3GPP – Time for a Sabbatical?
Understanding_Digital_Forensics_Presentation.pptx
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Ad

Exploits of the Snapcraft Ninja

  • 1. Exploits of the Snapcraft Ninja Dani Llewellyn (diddledani) she/her
  • 2. 08/11/2022 Dani Llewellyn 2 My Background ● Linux user since ~1997-8 ● Web, Desktop, and Server dev/admin experience ● Windows, macOS, and Linux ● Single System Image Beowulf-style clustering ~2001-5 (OpenMosix) ● Ran Gentoo for a decade learning a LOT ● Learned high-availability techniques via tools like CoroSync and Pacemaker ● Have since forgotten it all 😛 ● Used Docker and containerisation since Docker first appeared ● Primary contributions to Snaps/Snapcraft, WSL2, and Ubuntu Mate ● Featured multiple times on the Ubuntu.com Blog ● Ubuntu Member February 2018 ● Ubuntu Membership Board September 2018-present ● Microsoft MVP primarily for WSL-related community work
  • 3. 08/11/2022 Dani Llewellyn 3 Snap Packages ● Avidly followed Ubuntu Touch efforts ● Loved the advocacy streams by Alan Pope et al ● Excited by the Click Packaging system ● Backed the Ubuntu Edge campaign on Indiegogo ● Snaps arose like a phoenix from the ashes of UT ● Just as exciting as Click Packages, and for more than just phones ● Cue my jumping in to start experimenting...
  • 4. 08/11/2022 Dani Llewellyn 4 First steps with Snap Packaging ● Started out simple with a package for HexChat IRC Client ● Handed-off to upstream developers ● Began learning how desktop stack fits together ● Spread my wings further to look at other desktop apps ● My understanding of the desktop stack continually improving… ● Packaged several games, including ● OpenRA (Open-source Command & Conquer engine reimplementation) ● OpenTTD (Open-source Transport Tycoon Deluxe engine reimplementation) ● SuperTuxKart (Similar to Super Mario Kart) ● Micropolis (Open-source release of Sim City by the copyright holder for the One Laptop per Child project) ● And others...
  • 5. 08/11/2022 Dani Llewellyn 5 Fully committed?
  • 6. 08/11/2022 Dani Llewellyn 6 Yup, fully committed! ● After cutting my teeth on more simple desktop apps I wanted more of a challenge ● So I bit off a huge chunk with the GNU Image Manipulation Program ● This app is a monster package! ● Many dependencies that need to mesh just right ● At the time, and for the stable branch still, GTK2-based ● GTK2 was already legacy and no examples existed within the Snap community ● Yup, I learnt a LOT more about the desktop stack here, too ● Still principle maintainer via the Snapcrafters project
  • 7. 08/11/2022 Dani Llewellyn 7 How many Snaps? ● Lots! 125 repositories related to Snapcrafting – not all of these are package but more are.
  • 8. 08/11/2022 Dani Llewellyn 8 Snapstats ● I’ve been running snapstats.org for some time now cataloguing the Snap Store ● Unfortunately the scraping is now unpredictable – The Store is returning inconsistent numbers on repeated runs ● The site was an attempt at maintaining a third-party list of available Snap Packages in the Store along with some basic statistics like number of packages over time and which how many packages per architecture over time
  • 9. 08/11/2022 Dani Llewellyn 9 Screenshots – The graphs went wonky in February 2022 🤦‍♀️
  • 10. 08/11/2022 Dani Llewellyn 10 Snapcraft Summits ● My GNU Image Manipulation Program snap, along with my other snaps and wider activities in the ecosystem, brought attention from the Snap Advocacy team (Alan Pope and Martin Wimpress) ● They invited me to the Snapcraft Summit in Seattle in February 2018 ● The summits are organised hackathons where Canonical engineers work with developers from other organisations and open source projects to get their respective apps working inside Snap Packages ● Previous wins include the launch of Spotify as a Snap Package during a summit ● I mentioned I was working on a package for PowerShell Core so they organised for Travis Plunk from Microsoft to join us where we worked in partnership to bring a first-party snap of PowerShell Core to the store ● I contributed fixes to PowerShell Core to ensure that features of PowerShell that assumed non- immutable filesystem were functional ● One such example being the telemetry opt-out mechanism that relied on a file being created alongside the pwsh executable, which isn’t possible in a Snap Package due to the immutable filesystem
  • 11. 08/11/2022 Dani Llewellyn 11 So I’m a trusted expert now? ● Canonical employees regularly request my expertise ● Several blog posts featuring my insights on Ubuntu.com ● Star Developer on the Snap Store ● Core member of the Snapcrafters project ● Well known and trusted within the community
  • 12. 08/11/2022 Dani Llewellyn 12 What else have I contributed?
  • 13. 08/11/2022 Dani Llewellyn 13 Background: About Snapcraft Extensions ● In the past there were “cloud parts” ● Magic “parts” that you could declare your dependence upon ● When depending on a “cloud part” in your snapcraft.yaml the cloud would be pulled and built first ● Authorable by anybody ● Not scalable due to implementation ● Now there are Snapcraft Extensions ● Similar to cloud parts in that they are natively supported by Snapcraft ● Shipped as part of Snapcraft so requires a PR and approval and may be rejected ● Scalability not really proven yet ● So far only desktop-related and flutter extensions exist
  • 14. 08/11/2022 Dani Llewellyn 14 Why I want to replace Snapcraft Extensions ● Snapcraft Extensions “just work”, so why invent something new? ● They ship within Snapcraft itself ● Lead time till available is too long ● PR approval is arbitrary and may not be granted ● Must sign the Canonical Contributor License Agreement
  • 15. 08/11/2022 Dani Llewellyn 15 My idea and implementation ● At their heart, Snapcraft Extensions merely augment the snapcraft.yaml before using it to build your Snap Package ● Let’s do the augmentation instead of Snapcraft ● Enter sc-jsonnet: https://snapcraft.io/sc-jsonnet ● Write your snapcraft.yaml in jsonnet instead of YAML ● Use sc-jsonnet’s import capability to import remote jsonnet libraries ● When you have a snapcraft.jsonnet file, generate the snapcraft.yaml before building with Snapcraft: $ sc-jsonnet -o snap/snapcraft.yaml $ snapcraft
  • 16. 08/11/2022 Dani Llewellyn 16 Example snapcraft.jsonnet local snapcraft = import 'snapcraft.libsonnet'; snapcraft { name: "my-jsonnet-snap-name", version: "0.1", summary: "Single-line elevator pitch for your amazing snap", description: "This is my-snap's description. You have a paragraph or two to tell the most important story about your snap. Keep it under 100 words though, we live in tweetspace and your description wants to look good in the snap store.", grade: "devel", confinement: "devmode", parts: { "my-part": { plugin: "nil", }, }, }
  • 17. 08/11/2022 Dani Llewellyn 17 Adding a third-party extension to snapcraft.jsonnet local snapcraft = import 'snapcraft.libsonnet'; # import my ALSA extension local alsa = import 'https://raw.githubusercontent.com/diddlesnaps/snapcraft-alsa/master/alsa.libsonnet'; snapcraft { # removed for brevity – it’s identical to the example # on the previous slide } + alsa() # this is all you need to add beyond the import above
  • 18. 08/11/2022 Dani Llewellyn 18 Even better, extensions can take arguments local snapcraft = import 'snapcraft.libsonnet'; # import my ALSA extension local alsa = import 'https://raw.githubusercontent.com/diddlesnaps/snapcraft-alsa/master/alsa.libsonnet'; snapcraft { # removed for brevity – it’s identical to the example # on the previous slide } + alsa("1.1.9") # this builds ALSA version 1.1.9 from source instead of using the version # from the Ubuntu package archive (via APT)
  • 19. 08/11/2022 Dani Llewellyn 19 Documentation and available extensions ● Documentation for sc-jsonnet is available at https://sc-jsonnet.readthedocs.io/en/latest/ ● I’ve written two libraries of extensions: ● Snapcraft ALSA – A single extension to pipe ALSA output through PulseAudio for more a less privileged Snap Package: https://snapcraft-alsa.readthedocs.io/en/latest/ ● Snapcraft Utils Library – several extensions that perform common tasks usually handled via Copy+Paste: https://snapcraft-utils-library.readthedocs.io/en/latest/
  • 21. 08/11/2022 Dani Llewellyn 21 Snapcraft CI/CD pipelines ● Don’t want to use the Snapcraft Build Service on snapcraft.io? ● I’ve developed a build pipeline for both GitHub Actions and GitLab CI ● Uses my own OCI container image that can be used in any CI system that allowed privileged mode execution of containers ● i.e. launched via Docker CLI’s --privileged flag ● See my other talk “Automated Snap Package build processes without the Build Service” for full details
  • 22. 08/11/2022 Dani Llewellyn 22 Wrapping up… but first...
  • 23. 08/11/2022 Dani Llewellyn 23 Snapcraft skills for sale ● I provide contracting services to anyone creating Snap Packages of their apps ● Multiple organisations have now benefited from my expertise ● Contact me via https://snapcraft.ninja/ to introduce your project
  • 24. 08/11/2022 Dani Llewellyn 24 Acknowledgements ● Martin Wimpress (@m_wimpress), Alan Pope (@popey), both alumni, and Igor (of the Snap Advocacy team) ● For recognising my capability and enthusiasm for the Snap Packaging world ● For inviting me to Snapcraft Summits to share my knowledge and expertise ● For encouraging me to get deeper into the Ubuntu Community, such as applying for Ubuntu Membership ● Ubuntu Desktop Team, Snapcraft Team, and Snapd Team all at Canonical ● For being receptive to my contributions and constantly encouraging my continued involvement ● Sarah Dickinson (@dickinsonsarah7) formally head of Canonical PR ● For featuring my thoughts about Snaps and other Canonical projects in multiple blog posts on Ubuntu.com ● Heather Ellsworth (Ubuntu Desktop team; @linux_flower) and Monica Madon (former Ubuntu Community Respresentative; @communiteatime) ● For being excellent friends and providing constant encouragement and moral support, especially while I'm trying to find work that is suitable for my talents
  • 25. 08/11/2022 Dani Llewellyn 25 Where to find me ● https://snapcraft.ninja/ ● Ubuntu Discourse (diddledani) ● Snapcraft Forum (diddledani) ● https://github.com/diddlesnaps ● https://github.com/diddledani ● https://github.com/UbuntuAccomplishments ● Twitter (@diddledani) ● Mastodon (@diddledani@mastodon.lol) ● Also: I’m currently looking for (more permanent) work 😉