Right, hello. Welcome to a clock. Let's start. I hope you are having a great week Thank you for the organization for this great great events. I Mean, it's Friday afternoon. We are all a bit tired of the week. So let's have an easy talk about threads in embedded Linux So what I would like to Present you perhaps some of you have been already doing threads in other programming language or perhaps in other operating system on some embedded OS We have tasks and the good news is what you have learned. You can also apply it on Linux But the Linux landscape is a bit different from what you know And so it's important even though you can take your map with you Some of the region in your map will be inaccurate and what I like to do in this talk is to help you to correct your map Also, some of you may already be using successfully trade on Linux for these people. I like to show you some Internal and perhaps to help you to connect some dots I'm like domain a I welcome you to this talk. So we will have a six easy piece Getting started thread creation and life cycle thread stack memory access new text and condition variable and threads and signal Who am I? Well Like domain a I'm working with Linux since 1996 I Have a twist for safety critical software and I'm getting another bit older. So I thought it's a good idea not to pass the baton to the new generations So now I'm trainer at doulas since 2018 Doulas is a training company that provide great training for about 30 years now in hardware design and Verification as well embedded software and deep learning. So the question is why Linux? Why threats? You see here on the slide Some of the system has been working with Foundry simulation Telecom carrier grade air traffic control and I like the medical automotive What do all these system have in common? Well, they are either using Linux or trades and most of the time both and Traits should be seen as a programming model to simplify To simplify the the code when you have different concurrent activity Particularly in embedded system. We will use thread when we have multiple IO We want to handle multiple IO that may happen seemingly at the same time We may want also to use thread to take advantage of the multicore That's the case on Linux But more importantly you should be using thread between it will make your code easier to understand and to maintain Now you may say if you have been doing thread you say that's exactly the other way around. It makes things more complicated I see there are some confirmation over there. Thank you and The point of using this programming model is that you will have to have a clear understanding of the Timing dependency of the temporal dependency between your activity So it force you to get this right And that's something we want in safety critical system Okay Now let's review What is a threat? What is multi-threaded process on linux and voluntarily on classic system. So now a day a process is simply a collection of One or several threads and all these threads. They are sharing some common resources like for example the memory mapping or The list of all of open site descriptor and so on now a threads Is an abstraction and that's contain all the information we need in order to run the code on the CPU So in particular you will have thread specific Attribute like a stack you need to know where you are with functions And then other attributes that you need needed for by the scheduler So for example the state is it running sleeping and so on If you want to have a list of the resource that are shared by the trade what is common to All trade what is trade specific? Please look at man 7 p trades to get started on Linux there is a one-to-one Mapping between the Linux system trade and the corresponding Task truck the kernel task truck So meaning the Linux kernel only sleep task and the scheduler will schedule your trade accordingly all right Now I want to just discuss a bit of the details how it is done on Linux when we create a trade at application level we will use a p-track create which is offered by the C runtime library and Underneath the C runtime library will call the corresponding kernel System call for that it's the system call is clone and here you see a simplified view how to code this function We need a start routine. We need a stack and there is a bunch of flags That specify what you want to share between the cloner and the new clone you are creating So of course p-track create the policy standard will Specify what are the resource to share but nothing prevents us to create new user space? API that will be trade like but that will share other resources and I find it's a very beautiful API That is unfortunately under use on Linux Of course that would be a Linux specific solution, but sometimes you have problem that needs specific solution All right We have now achieved The first easy piece. Let's move on try creation and trade life cycle Well, there is an API. He looks quite straightforward. We need to include an edify We need to call p-track create. There are four parameters trade ID trade attribute Start function, and then we can pass an argument to the start function. Okay, that does not look complicated So here I have main that's my main trade of execution at some point I call p-track create and then I will have then to trade of execution the main and the start function I pass as an argument Well straightforward. Okay, then let's demo that let's start with first thread. How hard can it be? Here I have created a simple program p-track create. I have even do Some extra do some error checking make sure that the try creation is so successful and then I return zero from main what I've learned and Of course, we are doing our first thread program. So that must be an L. No the start function and EOSS we just print how far I'm a trade and then the name of the trade that is passed as an argument. Well, nothing complicated Let's compile go to the target and let's run the program. Oh, that's range. We don't see any Any output what's going on? Perhaps I don't use I'm not using the API properly and so on Well, no everything looks good. So you could look on the internet. What's the problem? But you may have also heard the talk on this trace. So let's use a trace to figure out what's going on. I use the minus F to follow parent and threats and What we see? Oh, we see that our clone function is called as expected here We see also the kind of resources that is shared with the clone We see that the clone is indeed created it as a clone ID 575 at the Linux kernel But then we see someone is calling exit group zero for whatever reason and then we see also that the new Tread was about to start but well everything terminated So now we need to figure out who is calling exit group zero That's not us. We have an exit But the exit is only in the error case and we will see here this print statement that we don't So fortunately we live in a world of AI and because I am also an HII trainer I've just had this morning a great AI that will be able to help me to figure out Where is the issue? Here I have chosen the muscle library because the code is a bit simpler to understand that glitzy But that's you have exactly the same on glitzy Okay, great. Hey. Hi. We is calling exit group on the muscle library. Let's see if we get some answer. Oh We have now these five lips. We start main that calling main like that exit main Rxrv mp and that's super funny Because in the alpha the file of fellow, there is an under store start function that the entry point and on Army does a branch link to exactly a function that is named like that Double underscore lipsy start name. That's a coincidence, right? So here what happened when your process start? There will be a jump to a start routine in the C library to do all the necessary initialization before calling your main function and the main function of your program is called like that Exit main blah blah blah. So when we return zero from main, we are passing zero to exit and bad luck exit Is the system code that we terminate the process that is all running trace? And that's why we are not seeing the result What's the fixed? The fix is easy. We should wait We should join the thread wait the trade to finish his business before we return from zero That's one possible fix What is the takeaway of this small test? the takeaway is that You have certain aspect to watch out when you are coming from some other OS or languages For example on some other languages when you do something similar like that no problem The system will wait that the trade finish And there are a few aspect to consider I won't go over it into details now I created these two table here That you can look you have access to the to the PDF you can if you move to Lean assembly that you can look at this table the kind of aspect you should be aware of And that's the table I'm using when I'm doing trade in some other operating system or Languages as well There is one which is dear to me safety critical. What happened if a trade cause an hardware exception segment? Will be only the 40 thread Terminated all the whole processes.  That's okay It has only an impact how to do the error recovering Okay, try that cycle because of the one to one mapping between the System trade and the kernel task. Well that follow exactly the same life cycle as any processes on Linux from a programmer point of view You can adapt a simple Version of it with only for state Renabled it's ready to run but not yet on the CPU. It's running on the CPU It's sleeping on it. It is excited. That's enough to resonate about your program and that's also enough to debug it alright, please Number three threat stack That's a super important topic on embedded OS when we have a small artist When we create a task we need to specify the stack and here the situation we have That's how we start or trade so far P12 create TID null start routine null Well, the trade require the separate stack and As we have seen many of the embedded OS require to define at least the stack size when we create a new task And so does the clone API by the way. No, I'm not seen yet And as a matter of fact that the second argument here null means you are using the default trade creation Attribute and there is a default stack size Then again with my safety critical twist. I'm interesting. What happened if we do a stack overflow? So let's Well, let's have a demo let's overflow the stack for fun and teaching. Let's do that That's the second demo So here it's a simple demo. I Create a stack sorry, I create a thread that will overflow the stack and Before doing that, I will pause before starting the The test and I will print some information about the stack and The thread itself is quite easy. We just have here. We are posing before we start all the tests. We are creating a An Array in the stack of 1 megabyte and then we are just calling the function recursively forever Okay, so let's demonstrate what will happen So here we see the information about the stack Remember in many a most architecture the start grows from higher address to lower address We see we have apparently 8 megabyte. Well, that sounds seems to be a big Also, if you translate the task ID that you get from print right way to a pointer it seems to be an address which is Located at the top of the stack Just perhaps a coincidence and then we have something called a guard size of 4 kilobytes We will see what it is. So now eight megabyte site that seems super big and Remember on Linux the Allocation memory allocation is a bit different Here I'm using the tool called P-map Where you can see the process mapping of the virtual memory mapping. So if we Look at P-map here. We see that the stack that has been allocated. I have 8 megabyte plus 3 kilobytes stack allocated at that address and Here the first 4 kilobytes here is marked as Not really, but we cannot do anything with it. That's the guard What's more important? I think on this output is these two number here. We are allocating 8 megabyte Stack size, but that's only the virtual memory address range that we are reserving Remember memory allocation on Linux is using a page for mechanism It means when you are accessed one valid address that is not yet mapped that will be catched by the Linux kernel And it will do the commitment the physical memory commitment and that's exactly the second The third column here. We see we have allocated 8 megabyte virtual memory space But we are right now using something like 20 kilobytes only Right, let's run the Let's run the let's start now for Infinite recursion and then we get a page fault And that's really a great things again because it means that if we have several stack several thread the stack could be Stack number one then you have the stack of the second thread afterwards. We won't be able to Smatch the stack of another thread it will crash on Linux again That's great from a safety critical point of view because we can we know there is a problem and we can do error recovery Right, let's summarize the situations This is what we have At the beginning of the stack typically the thread library the sorry the C library will put some thread control block That's information for managing the threads and then your stack grow downwards and as we have seen we have a guard here That's a region of one page One four kilobytes that is map, but we cannot really we cannot access it. So if we Try to go past this guard Immediately the MMU will inform the kernel and then you will get a crash Some perhaps consequences of what we have seen. So first of all Remember virtual memory range is mapped. That's not physical memory that get committed and Memories committed using patchful mechanism. So if you do real-time application, you may want to look for mlocall Then the C library on embedded system Linux We have different C library could be glitzy, but it could be also muscle now the point is Gipsy the default stack size is 8 megabyte, but on muscle. It's only 384 kilobyte So if you need half megabyte on your application, it will run fine on glitzy to a crash on muscle So here you need to adjust The stack size and finally why do I spoke about the trade control block? That's a block of information. That's an implementation detail where it's located, but it has an implication Namely if you don't join your thread or if you don't detach it This mapping will be retained until you join There are API you can control what you typically control is the stack size There is an API you can create a default P thread attribute Initialized with a default value and then you have API where you can change the stack size and then pass that to pre-try create Right, let's continue piece number four memory access So now we have the so first of all, what can we access? Because we are sharing the virtual memory space among all the trade as long as you have a valid memory address You can access it from all the trades now of course, we want to keep a certain sanity if in one trade you do write access X equal 42 and then later on in another trade you do a read access For X and no one in between mess with X You expect to get to read the value 42, right? So that's the minimum sanity we need But for that we need synchronization Because first of all, you need to make sure that the set occur before the read for this example and Also, even if it happened in the right order, you have no such a guarantee because of modern CPU multiple core Because of the system the way System is the cache and so on are down We need to put some special instruction to make sure that the value is seen So let's discuss what are the memory visibility rules that are there? By default so first of all when you set some values Before creating a trade in the new trade you will see this value. That's guaranteed Likewise when you change value in the trade and you join well in the trial where you join you will see what you have changed That's guaranteed But that's what's not guaranteed is what you do in between So here between the trade creation in the join I set the value of T and then I do in another try some operational T. Yeah, I have no guarantee So, you know that compiler can reorder instruction Well, so does so do now modern processor. They can also reorder the instructions So we need to ensure that something like that do not happen and One way to ensure that is to use synchronization mechanism offered by trade and We will discuss two of them mutex and condition variable so mutex That's something I'm sure many of you know that the classical critical section you have a shared resource here That's my T and what you do you take a lock you modify your shared resource and then you unlock the mutex and What this log do is guaranteed that Either you are doing it or not essentially So you won't get this problem that you are in between changing some data structure another trade jump in and also mess around with this data structure And you see an inconsistent value But the mutex does more than that What it does here when we unlock in thread a and then we acquire the mutex in thread B We have also a visibility guarantee of the value So the mutex will also implement all the necessary memory barrier For you Perhaps some quick facts on mutex for people coming from some other operating system You may say oh well a mutex. That's really like a binary semaphore And that's true, but there are a few differences first of all It's faster meaning that you will enter the kernel only if another trade already locked the mutex Secondly, it's owned by a thread and that's great because when a thread lock and someone else has taken the mutex I can know with this the thread I can look at the priority and when we do real-time priority We can then adjust the priority to avoid real-time to avoid priority in versions or to mitigate priority in versions So that's why it's that's the major differences compared to a binary semaphore now There is a consequences. We have dishonor sheet. It means normally the trade that's locked the mutex should be the one that unlock it What happened in our situation? You have a trade that lock in another that unlock it or you have a trade that lock it and lock it twice That will be depending on the mutex type So the default mutex on Linux if you lock twice you deadlock for instance Know that there are other mutex type you can use for example error check that will have all the error checking in place It's slower, but you will detect this kind of problem and it's great during debugging sessions And mutex does not synchronize which trade lock first here the previous slide The example work because this instruction key here happened before this one Now how do I guarantee that it is exactly this order if I reverse the order? Well, I don't get the right value for that We have something called a condition variable so that's again a synchronization mechanism and People coming from other operating system. They oh, yeah, that really sounds like an event slag. I know that already great Let's use it. Okay, so the it works as follow what you do is When you you lock your mutex here, we set the value t and then what we will do we will signal The trade that we have set the value t and then it can goes on with its business And then in the trade where we want to apply here for this change on t what we do we lock the mutex And then we wait with con rate. We wait on the condition. We wait to be signal Okay, now it's safe to continue and change the value of t And if you are in no event slags that the way you will program these kind of things now There is a bug now in this code It works fine if it's in the order presented in the slide, but if it happened that trade a run first then you will never You will block income weight because there is a rule when you notify here If it's if there are no nobody's waiting for the condition variable the notification is lost and Here there is a piece missing. It's called a condition variable and the idea of a condition variable You want to wait for a certain condition to happen. So here what's missing is the condition And here it is so that's the way you should implement condition variable Here what I'm doing in trade B. I say as long as t is not set I'm using zero to indicate that The t variable is not set as long as t is not set I will wait to be notified that is set And now no matter in which order now it will work So the usage pattern and I've seen this error many times. So that's why I Mention it You have a notifier trade you will lock the mutex change your condition notify the waiters and lock and The waiter does as follow you lock the mutex you while you are do not have the wanted condition You wait for it then when you come back from the while loop you are guaranteed You can then change do some work and change the condition Why it works because you can wait When When you enter to come wait, it will do two things it will unlock the mutex and we wait on the condition And when you are waken up, it will relock the mutex So here you have all the ways mutex protection and now you see also why you need a mutex here Because you check the condition on the waiter thread and another thread will change the condition So the mutex guarantee the visibility Well, there are a few a few more information About condition variable signal will wake up only one thread broadcast will wake up all the waiters And also use a while loop here the while loop is something like When you are when you are wake up you say, okay, it might be the condition I'm interested in but you recheck it again That's a pattern from safety critical And that's also what the standard say you should be doing there is a lot story about that But I have no time to tell it now. I can we can discuss that offline Right there are other synchronization mechanism I won't discuss barrier with wide right spin lock also know that on the embedded system We don't want to wait forever some of the lock and wait API have also a time inversion so that we can have a timeout right piece number six trade and signal So a signal traded process and you want to have a signal handler. How does it work? You have your main Execution there is a signal that arrived you jump to your signal handler you do the code in signal later you reason and that's it now trades Makes asynchronous code synchronous So that's someone Antinomic to signal and there are other issue that happened We have only one trade of execution to interrupt now We have many trade of execution which one should we interrupt and maybe it will interrupt the one I don't want so how should I deal with that so here be some dragon as we used to say in the whole map and What I want to do is to meet some dragon with you I will so compiling with p thread break my single trade echo that will never happen on Linux But what can happen on Linux? You don't have any trade and you deadlock and this is what I want to show you now all right Number last demo for today We have Here yeah, so that's a real-time monitor of some Brevelle's Consumption that's a version zero zero one as you see and Here what we do we have this empty monitor, but we have also a signal handler because The number are increasing too fast or stakeholder have asked could you implement something like press control C and I reset The counter so that the value do not go too high Okay, so I've been doing that I set the signal handler with seek action and here is my ender I just print reset the counter and well, that's it. Let's do more heat. Let's see what's happened Erty drink right we see this huge number of Brevelle's conception if I press control C Well, it's great. It's reset. So well problem solved until Well, if you try hard enough you will see that there is a you may encounter one problem And it can take some time to to generate the bug. So that's why I prepare a video for it And as a video you are seeing now so here what happened you press control C and nothing happened anymore It seems that the program is stuck So here what you do in this case? I have opened a new shell and I have started a trace with minus p I am attached to the RT drink process Okay, and now we see what it seems to be stuck in few texts You text is the system code that is used when you lock a new text and you need to wait That's very strange. I have no new text. I have no fit rate in my code. Where does it come from? It's really weird. So here I have no idea and Well, perhaps let's attach a debugger. I have in the lucky situation. I have a debugger I could reproduce the problem and so let's see what's going on I attach a debugger and well it takes some time to get started and Then I will do a back trace to see where I am where I am in the trace It's a bit slow right Okay, back trace. So what do we see? Ah, we were printing here this world consumption. Okay, all right Then what happened as we were doing this spring stuff the signal and the got called the signal got received And then we jump in our under and then we have IO pass So we didn't see path but here or print statement do not have any formatted variable So that's why it's don't don't say to to pass and here it seems then we are using a few text weight well, that's Of course, that's that's really how what's going on here Fortunately, we have this great tool great pay. I so perhaps we we could great pay I Why does print a they look in signal and the question mark Well, this is what we get. Well, it seems that there is There is a bug in great pay. Well, it seems that it seems there is a I think that now it thinks there is something called lock file Implemented in steady IO. I won't get that. It doesn't matter It's 23 that was the bug. Okay, and if you look at the file And you see that here it seems that this we are doing something like That's what is managed in the The IO and internally the print statement has some data structure. You need to protect in the case you run With on Multitraded code So what it does it does a lock actually And this is exactly what we are seeing here So there is a lot implemented and the problem you have taken the log in the first Statement you singler single endler has been called you print you re-enter print and you lock again You are to twice this log and you desock and The point is there is a bug in my code. It's not safe to print tests in single handler, so that's really the bug here and The bad news is none of the p-tread function function are safe to be called in single handler So there is a way out of that and the way is as follow Is What you will do before starting any trade you will block the signal you are interested in with p-tread signals Now when you do that when you start the trade all the trade will block this signal and then what you do You create a special threads that will wait synchronize only for the signal you are interested in and then you can do whatever you want It's a normal trade and you don't have the mess. I'll show you before Wait, there is more to say but I think we have only four minutes left You have seen a pattern how to end a signal in multi-treaded code Well, there is more to say about signal and processes, but I will skip that for now Right if you are interesting to go further There are great books a month seven p-treads. That's the starting point Book of Michael Currice is a really great book. I'm biased because I review it This is an old book from David Butonoff, but still relevant and if you want to learn more about Parallel programming concurrency threads and much much more there is this really great book from Paul McKinney It's available online. That's a book that Paul is maintaining since 20 years updating. It's really a great resources So I hope you have enjoyed We'll talk If you want to come at your booth or visiturals.com if you want such a great training like now visit us and Well, maybe you have any question. Thank you very much Question. Yes. There is a question over there. I Very sorry. I need the mic or the vice.  Do you know Do you know this meme? I will show you what great. I Okay, thank you Thank you Unfortunately, I've Introduced a but I didn't test it it properly All right any further questions Any question online? Yes, there is an online question threads.h is included in C since C11 Could we not use these in embedded Linux? Oh, that's absolutely correct Actually, if I remember correctly on muscle or on glipsy it will use underneath. Yes, that's true That's something I haven't looked at to it yet, but correct That would be if you want from the language support a way to go. Yes Thank you Well, I think that's it Enjoy the show and join the week. Thank you very much for being here. Thank you


Hello, this is Nick from Laptop Media and today we will show you how to open the Lenovo ThinkPad X1 Carbon Gen 11. If you want to open the device you need to undo 5 captive Philips head screws. Then you can pry the bottom plate starting from one of the top 2 corners, and then you can work your way around the zone behind the hinge. Please remember, it would be of great help to us if you just hit the like button and subscribe to our channel. What would motivate us to make even more and better videos for you? The battery is a 57 watt hour unit. Because the connector is built into the battery, you need to wear gloves in order to prevent short circuits. Then you have to undo the 6 Philips head screws that are fixing the model in place. The capacity is enough for 25 hours of web browsing or 20 hours of video playback. The result is just outstanding. Here we have a soldered memory. On the bright side, you get up to 64GB of LPDDR5, 6000MHz RAM, which sounds future proof. The 32GB configurations come with the same memory clock, while the 16GB iterations rely on 6400MHz memory frequency. Note that the RAM is rated at 7500MHz for all machines, but it operates at a lower frequency due to platform limitations. There is just one M.2 slot for 2280 Gen4 SSDs. It's protected by a metal plate that has a cooling pad on the inside. Another pad is placed below the NVMe. Next to the cooling is positioned the W1 slot for optional 4G or 5G connectivity. The cooling seems basic, but it seems enough for a U-Series CPU. It comprises two small fans, one thick heat pipe, a heat sink, and one heat spreader.


Hello, okay Hey folks so we are here we are talking about re-involving in-demo in Kata containers with Mobi and staff engineer from ENCOOP and I'm Corey Snyder a software engineer at Morantis and a maintainer on the Mobi project So today we're gonna be going through re-enabling Kata containers with Mobi Starting with the history What happened to break Kata containers with Mobi? Why things went south? how we fixed it the future and Wrapping up with a nice little demo wish us luck So starting off with the history Beginning of Docker it was just a single Single monolithic binary that did everything everything related to containers From what I hear is before my time, but even the command line was part of the same binary Yeah There was a component called lib container that handled the actual low-level bits and in 2015 the Open container project now known as the open container initiative was formed to make containers more vendor-neutral as part of this effort Docker modified lib container to run independently and Donated it to the open container initiative as run C They then followed up a few months later by releasing container D a daemon for controlling run C And then a few months after that in 2016 Container D and run C were incorporated back into Docker engine version 1.11 So due to that shift in architecture. Oh, excuse me apologies due to that ships in architecture it was Now possible to substitute a different low-level runtime without changing the higher level components and Then first-class support for multiple runtimes was added to Docker at 1.12 Now with that any number of runtimes could be plugged into Docker engine so long as they follow the same command line interface as run C The command line interface has since been formalized as the OCI runtime command line interface which is not to be confused with the OCI runtime specification The runtime command line interface is merely one possible API which an OCI compliant runtime may choose to support then 2017 the MOE project was launched as the upstream open source product project for the Docker engine And as well Cata containers Yeah, with that since Docker has support open the option to support different runtime We started the Cata containers. It was a merge of two already open source project run C Oh, sorry wrong V and the clear containers and We hosted this We merged the two plastics and the Cata containers and hosted it in opening for foundation and within within name of we provide the speed of container and security of machine machines and This is a initial Cata containers architecture The idea is that we pretend the Cata containers is dropping the preference the placement of run C And as you can see there are many components. We have a Cata sheen then that is essentially like Condition and we we also have have color on time is a command line interface as run C and also a proxy to to allow us to talk to the version machine about Vertile Port I think zero zero port as yes, and we need a Yamax to do a to do to do a multiplexing and we have the current agent inside the virtual machine to To actually spawn the containers inside of it. So what happened? So what happened? well all comes down to The runtime interface v2 almost so yeah container D does not directly launch those low level run times like run C It actually launches a lightweight Damon sub-process known that is known as the shim And then it issues RPC commands instructing the shim to drive the runtime The reason for this architecture in this intermediate process Is that it allows containers to survive a sudden restart of container D so yeah, yeah with with Kennedy to With that shim we to interface Kata is able to simplify its own Architecture so then so we combine the cut a sheet different color shims of this import In and also the proxy into a single Container the shim we to process so this gradually simplifies the color architecture and the deployment the simplicity and also performance and the density all the all this come to this new cut architecture and With but in Adobe side the WD to have support for Kennedy long time v2 for quite some time But it only support it is already supported with limit limited fashion while support of Multiple runtime was retained. It was done. So by hard coding the use of run C Sheep so cut a shim is not possible for that in that case and also It instructs the shim to extrude a different runtime binary. Essentially, it used the new API to implement existing behavior, but nothing more so It's a blockage for Kata shim we to and With it and then and then time we released the Kata 2.0 and the production ready solution for win-based containers and Because we can The initial architecture is too too heavy for production. We we decided not to support it and and then time We dropped Docker support as well and Bobius and the moment So, yeah, things went south because Moby lagged behind in supporting other runtime v2 shims and Well, Kata needed that support So with Kata 2.0 that support was lost Now how we fixed it? Well the first step in getting Moby and Kata containers working together again was adding support to Moby to select other Container the runtime v2 shims interestingly Enabling Kata containers was merely a side benefit of the work The main reason why I added that functionality was to allow MCR Marantis container runtime our commercially supported Moby distribution to ship distro packages for Another runtime which actually doesn't need its own C run So that it could be installed side-by-side with RunC and use without any additional configuration now C run is drop and replace run C as I mentioned and so could already be used with Moby without any modification, but Side-by-side installation would have required configure Moby The Moby Demon to register the runtime with it. So that old days Yeah, Moby's configuration system is not really suitable for stateless Deployments, there's no real affordances for configuration like drop-in files or Drop-in directories or anything of that sort There are you've got command line arguments. You have a single JSON config file and that's it some distro package to Like to install a side-by-side runtime would have had to modify the demon config file Which might have been customized by the user With all the hazards that entails Like well because it is JSON. Yeah installation could probably be okay But I shuttered to think of all the ways things could go wrong when uninstalling So I just didn't want to go anywhere near that So my first attempt I did attempt to extend Moby's configuration system To support more stateless drop-in files But it turned to be a huge project where I would have had to basically boil the ocean totally overhaul how config works in Moby and all of this just for additional runtimes So I looked for a another way to do it without having to touch their configuration configuration problem Well container D doesn't need any configuration to use different runtime V2 shims You just tell it the name of the shim and it just automatically works it out It really isn't much magic actually When container D is instructed to start a container using the runtime I'm using the example IO dot container D dot food up bar It just looks for a binary so it takes the last two parts of it prepends container D shim and Searches for that in the in the path environment variable list of directories so I Chose to instead add support for additional runtime V2 shims so that Moby could just leverage the same functionality directly the same stateless configuration magic and Now once we do get around to packaging C run for a side-by-side installation with run C on Miranda's container runtime future future We'll be doing so by pretty much as packaging up a copy of the run C shim that's been tweaked to start C run instead So that was the first first problem solved Now we could select IO dot container D dot cat a V2 as the runtime and Catac containers could be started just a handful of little issues That needed to be sorted out, you know little ledge cases you know like networking Like any networking no one would need that in a container, right? No one would miss that so You want to take this? So yeah, networking didn't work with cat as a QMU based hypervisor because of a little problem with the way cat I implemented OCI runtime hooks For those unfamiliar hooks our programs which are specified in the containers like OCI container configuration file that's passed the runtime and The runtime then goes and executes various the different hooks at different stages in the containers lifecycle and Well as you can imagine since I'm talking about networking that conventionally hooks are used to set up containers networking and In particular Moby relies on the pre-start hook for its network configuration Now notably about this hook is that it predates the OCI runtime spec and version 1.0 of the OCI runtime spec did codify the behavior of the pre-start hook But it also deprecated it in favor of more granular hooks Unfortunately it codified the behavior of the pre-start hook in a way which Tiffered from how RunC implements it and so when Cata containers went and implemented the pre-start hook They implemented it according to the spec perfectly sensibly And that's actually why can you're networking did not work Because Moby having co-evolved with RunC with RunC coming from Initially the Moby sources it expects the pre-start hook to be invoked the same way that RunC does and so the solution was to Modify Cata containers to invoke the pre-start hooks the same way that RunC does at the same point in the life cycle and in the same execution environment and Also by patching the OCI runtime spec to match up with the on the ground reality so that no other runtimes will make the same run into the same incompatibilities And also my little pet theory for why no one else noticed that there was a problem with the runtime spec that I'm guessing that all the other high-level runtimes Let the ones that would interact with container D and RunC Just did not have the historical baggage of Moby and so avoid the pre-start hook and instead use the more granular hooks Which were all implemented the same across the board as well Yeah, one of the Cata's containers other hypervisor choices cloud hypervisor Just was not working with networking because it did not did not support Never gonna face hot plug But as has been explained to me It is was that came from it starting out as a copy of the firecracker hypervisors agent runner whatever component which firecracker, which does not at all support Network hot plug so that was just copied over despite cloud hypervisor the actual hypervisor component supporting it so it was apparently just a simple thing to fix and the last interesting Not the last interesting issue one of the other interesting issues was that yeah If you try to use Docker exec on a Cata container started with Moby It would work until the exec exited and then the container would exit and the Docker exec command would hang So that's not helpful What was what turned out to be happening was that Moby was actually misinterpreting the exit events From container D for the exec process So it saw the it received the exit event for the exec Process, but it was misinterpreting it as the containers in it process exiting and it was acting accordingly Going and then cleaning up the container killing the whole process tree The whole usual thing and then leaving the exact hanging because well the exact hasn't exited yet, right? So yeah, the root cause of that was a flawed assumption in Moby specifically that the process IDs Or the I should say the PIDs And the host system of the containers in it process and it is its exec process were all distinct Now that is true When all the processes are running on the host kernel Well Cata containers run in a virtual machine on a different kernel and so that assumption is not true What happens is Cata goes and reports the same PID for all for all container processes specifically the PID of the hypervisor and So the fix for this was to modify Moby to instead use the Process ID string which is an arbitrary string in the container D API That's assigned to every every task and process started through container D and reported back through the events So in that way there's no ambiguity And allows Moby to then correlate the exit events to exactly which process which started container process it was without any troubles with VMs and There was one more in compatibility which actually we had only discovered a few days ago while we were preparing to Preparing the demo for this talk Yeah All currently released versions of Moby cannot start containers with Cata version 3 2 0 alpha 3 Unless the CPU shares option is explicitly set when starting the container or creating the container rather As it turns out Moby has as far as I can tell always been unconditionally emitting the In the container config This resource limit Linux CPU shares property It's a C groups thing It's all unconditionally been emitting it Even if it was not set by the user and basically the user wanted to like leave it out whatever the system default was Trouble was oh Yeah, also that yeah property is optional in the runtime spec So really the sensible thing to do is just leave it out if the user doesn't want it set Well Moby was Unconditionally outputting it and it was setting it to zero Trouble is the minimum legal value that the kernel accepts is two and Yeah, this is gone unnoticed for ever because run C Sees the value of zero and says okay looks like it's on set and runs along merrily and Yeah earlier versions of the Cata agent running inside the VM were more tolerant of those invalid values Now the Cata agent does distinguish between set none set for that that CPU shares resource configuration and so goes and tries to set the container CPU shares to zero through system D and System D correctly returns an error saying zeros out of range and Then the container fails to start because Cata handles errors like a well-behaved software should now Cata is arguably behaving correctly here and Moby's wrong and I have gotten a fix to Moby that's now been merged into master But it's not yet made its way into any release Now how for the future? What is the future of Cata and Moby? well Really the diversity of run times is beneficial for the whole container ecosystem like as as demonstrated by all those incompatibilities and issues that came up Having a runtime Implementation which does not attempt to be entirely compatible with run C and which is not written in go or written in C It is really helpful for challenging all these implicit assumptions in the implementations And so yeah that CPU shares issue Just mentioned is a great example of this As the Cata v3 agent is written rust it follows different conventions internally Then the go code bases of a Moby and run C So it's a rust code base. And so the option type is pervasive and ergonomic to use Lucky rust developers. I'm jealous. And so it makes it natural To distinguish between unset and unset value in a set to zero value in a rust code base And a go code base zero means unset except when it doesn't except when it does and Or your options other option and go is to Use pointers represent optional values which has its own Unorganomic stuff not to mention all the performance stuff was spilling onto the heap and it was actually Like the reason why that all went up why the bug was happening Moby and why run C was Was like not Was not falling over was because of the conversion between those two go conventions Moby was using the zero means on set convention internally but then on the like the actual serialization to json the The pointer to on as unset convention was used And then on the run C side it un-martials json using the Pointer as unset convention and then converting it to zero is unset convention And so run C couldn't like couldn't tell the difference because both of those get coalesced to Zero and also now more more concretely for the future Well Love to go and support Kubernetes pods with CRI docker-D And now in order to support coupods Cata will need to know which containers need to share resources go so it can group them in the same virtual machine This has a historically been communicated to Cata you through OCI annotations and Moby has historically lacked support for setting OCI annotations on containers I've recently gone and added that support into least the Moby docker engine component In preparation and all that remains is wiring it up to CRI docker-D contributions welcome Although now with the container D1.7 sandbox API Maybe we want to leverage that instead The thing is Moby still targets the version 1.6 can energy API So the sandbox API, which is newer 1.7 We cannot depend on it yet, and there's not been any work No one's even thought about how we would plumb that Can the sandbox API up through Moby's engine API so that CRI docker-D can leverage it So once again contributions welcome, please Lastly, would you like to take this one? Okay. And so also there's a docker command Docker connect then to a docker network connect then he is able to connect a container to a different network And then he's then it is started on and this will require some modification of the containers network so with but When we drop Docker support we also removed we used to have support with a kind of monitor kind of network monitor to to do it but when we drop docker support we set you to remove the legacy code or the legacy code as well so Then end up being missing when we and and the docker support bank and also we are since we are rewriting the Kind of runtime in rust we we may need to need to need a rust version of Container network monitor then to this work is being designed and it is been proposed as a summer code project of kind of containers and we have given in code camp project and University student is actually we working on it. So This is to be expected. We should have it in the next release So, all right now demo Where's a demo page demo time? Alright, this is gonna be fun because I don't have the screens mirrored Okay, first up Do this with three hands? No, oh, okay. Oh, thank you. Okay. So first to show there's nothing up our sleeves It's just there we go. No config file at all just for reference. There's you name dash a and That a container And also just to show there really is nothing nice leave Running with run C so you can see as very much running in a totally different kernel Thank you And we still have a couple minutes. Are there any questions? What's the target for GA on this? You can try it out today and let us know what what bugs you run into It's gonna be very much an ongoing process. All right. Thank you. Thank you


Item number, SCP-583 Object Class, Euclid Special Containment Procedures SCP-583 is to be locked in a heavy-duty chrome steel safe. Any level 3 or higher personnel have access to the safe. A lethal security system is to be kept operative in the containment room for SCP-583, at all times. SCP-583 is fragile and must not approach or be approached by any magnetic field-generating material or device. SCP-583 is only as sturdy as a standard videotape and is to be handled with extreme care. SCP-583 must not be destroyed due to continued research into data expunged. Description SCP-583 is a Sony Color Collection 60-90-minute mini-DV videotape, its case composed primarily of transparent green plastic, details of the contents of the tape itself, as described by test subjects. Zero minutes, zero seconds, nothing on the tape for the first 12 seconds. 12 seconds, playback of a recording of Sesame Street Live begins, although with no sound. A date stamp of f*** is visible. Two minutes, 58 seconds, it starts choking and tries to get out of his costume. Three minutes, 12 seconds, dies from apparent asphyxiation. During the next 19 seconds, three other characters start choking and die in the same way. Three minutes, 31 seconds, recording stops, the rest of the tape is blank. Subjects who watch SCP-583's recording suffer from a unique perception disorder. After seeing f*** die of asphyxiation, subjects witness the similar death of every character, fictional or not, that they see on TV or in a movie, here on radio or read about, whether printed or in electronic format. This condition appears to be permanent, ending only with the death of the subject. Document 583-T01 for further information. Document 583-T01 recorded testimony of f*** after exposure to SCP-583's recording, retrieved during Intervention P-12, translated from French. Subject was given a hardbound copy of A Clash of Kings and was asked to read aloud from anywhere in the book. Subjects started reading at page 201. This is testing the effect of SCP-583. I start reading, Ago was back next. The Southwest was barren and burnt, he swore. He had found the ruins of two more cities, and since, he has started coughing. Okay, I think it has started. I'll read further, he'll die. You'll see. Back to the text. One was warded by a ring of skulls mounted on rusted iron spears, so he dared not enter, but he had explored the second for as long as he could, before his throat began to ache. He showed Danny an iron bracelet he had found, set with an uncut fire opal, the size of her thumb. She was sick too, and the idea of the princess being ill like he was comforted him a little. There were scrolls as well, but they were dry and crumbling, and Ago had left them where they lay. He took a rest in his tent, praying a good night to his Targaryen mistress, and died that same night. I skip a few pages now till Danny dies too. Hear this, here I stand. Look, if that is your pleasure, but first tell me your names. And then she fell. I need a book with a lot of characters in it, I guess. Okay, so now I'll read this Carambar joke, note. A Carambar is a French brand of candy bar which contains low quality jokes on the inside of its wrapper, so you can see it works with anything. Why did the chicken cross the road? Who cares? Halfway across the road it fell over and choked and died. Ha ha. End of testimony. Addendum 1. Class D personnel exposed to SCP-583 are to be placed into psychological studies to examine the long-term psychological effects of exposure to SCP-583. The standard termination schedule for these subjects may be waived with authorization from Dr. R- Lesson complete. If you missed the previous orientation, go watch SCP-582, A Bundle of Stories, right now. Or for the complete course, watch this playlist.


Yn ystafell ymbyddai ystafell 3, o'r ysgolwyr Cynonau Ysgolwyr Ddiogelysgol yng Nghymru. Yn y ddiwrnod o gyflawni, mae'n mynd i'r ddod o'r byd ystafell 2, ysgolwyr S&P Bill 20A, ysgolwyr The division bell will sound and proceedings will be suspended for around five minutes for the first division of the stage three. The period of voting for the first division will be 45 seconds. After that I will allow a voting period of one minute for the first division after a debate. that, in the special division after the debate. Members wish to speak in the debate on any group of amendments should press the request to speak buttons or enter RTS in the chat function if they are joining us online as soon as possible after I call the group. Members should now refer to the martial list of amendments. We start with group 1, minor and technical. I call amendment 4, in the name of the cabinet secretary, grouped with amendments 5 and 9. Cabinet secretary, cyffinodwmaeid dŵr a chynnywllio'r dylen i dapu eich dlexu yn eu FC. Maen nhw'na dros flu grain y gwath. Networks EndDP ynddill. is for charities to obtain consent before going ahead with those changes. As a result, we no longer need to make provision in paragraph 4 of the bill's schedules about how the 42-day period is to be calculated in a case where the charity ends up agreeing a different name with Oscar from the name that they originally sought to consent to. I move amendment 4. We welcome all the amendments in the name of the cabinet secretary and, just for clarity, we will be supporting them all as we go on this afternoon, and we will not be speaking to them. The question is that amendment 4 be agreed to. Are we all agreed? The Parliament has agreed. I call amendment 5 in the name of the cabinet secretary, already debated with amendment 4. Cabinet secretary, to move or not move. Question is that amendment 5 be agreed to. Are we all agreed? That is agreed. We move on to group 2, register of persons holding a controlled interest in land. I call amendment 3 in the name of Jeremy Balfour, in a group of his own. Jeremy Balfour to move and speak to amendment 3. Thank you, Presiding Officer. I suspect that this is the only slightly controversial part of this afternoon that is going to take place, but I do think that it is a really important issue that we are going to debate over in the next few moments. I do hope that the chamber will take serious the concerns raised by churches and faith groups across Scotland. What we are seeking to do is to exempt Christian Charities Church's religious bodies from a previous piece of legislation passed in this Parliament. Of course, there is already precedent for that in that Scottish Charitable Incorporated organisations were excluded from that. The reason that we are seeking to do this is not because the churches and religious bodies do not want to be transparent and open, but it simply comes down to whether it is reasonable and appropriate for them to have this. Perhaps this can be best illustrated, Presiding Officer, by submission made by the Scottish Episcopal Church at stage 2 of the debate that we had in committee. They pointed out and they gave one example of why one diocese here in Scotland. We said that there were 50 congregations, five diocese trustees, compromising 50 church buildings, 40 rectories, 25 church halls, which equals 100 properties in total. With each congregation having a minimum of three associates, the number of registrations required would be five times 115 times three, which I am sure you know, Deputy Presiding Officer, equals 1,725. If you multiply that across the seven dioceses, we are looking at a large number of transactions that have to take place. That has to happen every time somebody steps down and another person is reappointed in their place. That will mean that a lawyer will have to be instructed to do that and that will cost money. We were told in the stage 1 debate that it would cost over £100,000 per year for the Church of Scotland. That is money that could be used to fund social work, to fund good causes, to fund other activities of that denomination and of churches. Every trustee that will be part of that is already on the register under Oscar, so their names will be there for people to see and to know, and there is no hiddenness happening. I am deeply concerned that limited resources are going to be taken away from those organisations, not to do what they are set up to do, but simply to pay lawyers to do more legal work. I am also concerned that there is a liability issue here. If they do not do that and if there is an oversight by somebody not doing it, they will open to legal action against them. On behalf of all parties that we want to see, we want to see more people coming forward to take up those positions. I believe that this would be a major step forward if this amendment was passed this afternoon by this chamber, and I ask all members to consider it seriously. Thank you very much, Deputy Presiding Officer, and I wish to make a brief contribution in relation to this amendment. I am sure that that will not come as a surprise to the Government, given my interests at stage 1 and stage 2. On the issue of the controlling interest of land in relation to religious organisations and churches, those issues were raised by my colleague Rode Grant at the time of the SSI on the amended regulations earlier this year, and I will refer back to some of the points that she raised at that point, which I do not think have been fully addressed by the Government. What is fundamental here is transparency, proportionality and accuracy. We all want to see a register of charity trustees, which the bill is seeking to put in place, but also a register of persons holding a controlled interest in land that is transparent and accurate. As I have said already, the bill firms up that register of trustees with Oscar, making it clear who is in control of the charity and who is responsible for it, and that is, of course, very welcome. However, there is an opportunity to deal with concerns that have been raised by many churches and religious bodies in relation to the register of persons holding a controlled interest in land. I do not view the amendment as making organisations exempt from the register of persons holding that controlled interest, but rather seeking to record their interests more accurately and reducing the burden to individual office bearers. The Government has, of course, exempted skills, charitable incorporated organisations based in England and charitable companies limited by guarantee, arguing that they are covered by alternative transparency regimes with Oscar. Why, then, would religious charities not be covered by the new transparency regime that will list the trustees of individual charities that we are considering in the bill? Those are the trustees whom we know will collectively make decisions on the assets of the charities in line with the democratic structures of their organisations. Indeed, at a cursory glance prior to coming to the chamber, I was able to access the financial income and expenditure of the churches in the community where I live and some 37 pages of entries just from the Church of Scotland from across the whole country. To further that example using the Church of Scotland, it would contend that the regulations, as they currently stand, do not achieve the aim of transparency and who has the controlling interests in respect of the land that they own. They actually argue that the opposite is the case, because, as members will know, the Church of Scotland will have to record individuals who hold congregational offices, such as the minister, the session clerk and the treasurer, and they are deemed by those regulations to be the people who exercise control or have significant influence over the land. The governance of the Church of Scotland is designed to preclude individual control. Indeed, I am sure that we remember from our history lessons that that was the whole point of the reformation. No single individual, including those named office bearers, has control over decision making in relation to land, so the register would then be inaccurate. We could argue that it would not be wholly transparent or that it would create that level of transparency that we all intended when the legislation was passed, albeit that I was not a member of the Parliament. It would not make far more sense for the organisation to be registered as the organisation that holds the controlling interests to better reflect the accuracy of decision making processes and the decisions that will be taken on the land within the organisation, given that the details of all those organisations are publicly available and that their trustees will, by virtue of the bill, be on the charity register. I will finish where I started with my colleague Rhoda Grant, who said at the time of the SSI that the legislation was designed to close tax loopholes and to create transparency about who the beneficial owners of land are, especially when that land is held in companies that are registered in tax havens, but it should not put an unacceptable burden on Scottish churches. I think that there must be a solution that we can find that has balance in transparency, proportionality and accuracy. Thank you, Presiding Officer. Can I just contribute briefly to the debate on this amendment in the name of Jeremy Balfour and declare my interest as a member of the Church of Scotland? I echo what Mr Balfour and Paul O'Kane have said in relation to the importance of the amendment that is before us today. The Land Reform Scotland Act 2016 provides that there should be transparency in terms of persons having a controlling interest in property in Scotland. That is a perfectly legitimate and credible policy outcome sought by this Parliament at the time. The problem is that that legislation has unintended consequences. I do not think that it was ever intended when that legislation was put forward that we would see churches and charitable organisations, religious charities caught in the way that they have been as a result of this legislation, and we have all been approached by church groups raising their concerns about this. The Church of Scotland has a presbyterian structure. Essentially, that means that decision making is devolved to a local level, to local parishes and local curc sessions that are elected by the members of the individual churches. Therefore, the titles to properties held at a local level are in names of those individual curc sessions, and those curc sessions change regularly. Sometimes they can change as often as annually. There will be a continual churn and cycle of the names of people involved. As has already been pointed out, there will be an enormous administrative burden put upon local churches of having to comply with those particular regulations in relation to persons holding a controlling interest in land. The Church of Scotland says that it currently has a title to 5,000 properties across Scotland in local areas such as church buildings, church halls, mansas and other properties in my own. Each one of those 5,000 properties will require to be registered in the name of three office bearers. That is a huge burden to start with. Every time there is a change in those office bearers, which might happen on an annual basis, they will all need to be re-registered. Again, that puts a huge burden on the Church of Scotland and other churches across the country. As members will be aware, the Church of Scotland is presently going through a reorganisation, amalgamating presbytriae, amalgamating a number of parishes, reducing the number of places of worship due to the decline in the number of worshipers and the decline in the number of ministers and is already facing quite significant financial challenges. To put on the Church of Scotland at this time, the additional financial burden that Jeremy Balfour has referred to would seem to be entirely inappropriate. I cannot say that there is any public policy interest in pursuing the requirement that churches and other religious charities should have to comply with those particular regulations. It seems that it is simply bureaucracy for bureaucracy's sake. I would support the amendment that is being put forward by Jeremy Balfour. I would say to the Government that the Government is not minded to support this amendment. I think that it really needs to tell us what other mitigations it might put in place to try to address the issues that have been identified. I know that it has been suggested that there might be a delay in the regulations being brought forward, but all that does is postpone the inevitable. I mean that these additional burdens will still come in and will last until time in memorial with an annual cost to churches and local church sessions. If the Government is not going to support it, and I hope that the Government will, if they are not prepared to support this amendment, please can they tell us what else they are going to do to try to install this problem? I think that the arguments that have been set out this afternoon are eminently sensible. We have heard about the Church of Scotland. It is designed to preclude individual control, but the Government is going to require those organisations to state who has that individual control when that individual control does not exist. I do not understand why the Government is pursuing this when there is a perfectly practical solution to this, to avoid double registration and double reporting, to reduce the burden, to make sure that we do not discourage volunteers from coming forward to operate within those organisations and to reduce costs as well. I think that Murdo Fraser's last point is also incredibly sensible. I understand that the Government is probably going to push ahead with its proposals, but it has got an obligation to make sure that it does not cause an undue burden to those organisations and therefore that they have proper, meaningful mitigations in place. We cannot deal with the consequences when those organisations are already going through quite significant turbulence. I hope that the minister will have a last-minute change of heart, but, if not, we need mitigations in place. Thank you, Deputy Presiding Officer. From the outset, the bill has not been controversial, but this section has certainly been. The churches and faith groups that really have great concern over this have been quite clear. I state from the briefing that the Church of Scotland has put that the Church has sought to explain those points on countless times to the Scottish Government and offer constructive solutions. They say quite clearly that they have been disappointed that the Scottish Government has not recognised the willingness to work with them and that they have been unable to appreciate their situation. It is clear, as has been stated in the debate, that there are going to be unintended consequences. Ministers accept that, because they have already said that there will be a year extension to this for churches and faith groups. As has been stated by others, I think that it is important that there are mitigations in place around this and whether or not the cabinet secretary will look at reviewing this before it comes into place. I do not know where the Government whips and the Green and SNP whips are today, but whether or not this could be supported, because I do not think that it is controversial that these regulations can be excluded from this bill at this stage. Certainly, throughout stage 1 and 2, we have made these arguments on a cross-party basis and as have church and faith groups. I think that it is important, because, as Fergus Ewing stated in the debate at stage 1, it is clear that these will have financial impacts. None of us in this chamber want to see more money being used by our charities for legal costs. We want it to go to their purposes and for churches and doing good in our society. I hope that the cabinet secretary will take on board the concern across party on this and that mitigation and review can be brought in early, especially given the one-year extension. I think that she will tell Parliament about it soon. I am afraid that I cannot support amendment 3 in the name of Jeremy Balfour for the same reasons that I could not support it at stage 2. Charity regulation is fundamentally in place to ensure and maintain public trust in the operation of charities. The register of persons holding a controlled interest in land, known as the RCI, was an essential part of the land reform act unanimously passed in 2016. The purpose of the RCI is to improve transparency in relation to land and property assets irrespective of what type of legal entity owns them and to ensure that there is a dire length link between the property and whoever exercises a controlled interest in that property. This bill seeks to increase transparency in relation to charities and is not about the RCI. All parties supported the introduction of the RCI, which is a key part of our land reform strategy. Much progress has been made by the Parliament on delivering greater transparency in relation to individuals who have control over decision making in relation to land.  I am sure that the cabinet secretary agrees with me that those provisions were put in place to find who the beneficial owners were, who offshore their companies, who hide behind legislation and who do not pay their taxes. At no point did anyone think that churches would be caught up in that legislation. I would appeal to her to look at this again, because what is happening with the delay in acting in that part of the legislation is that the people who seek to hide their companies offshore and avoid scrutiny in Scotland are allowed off the hook, while people who are volunteering for churches are being held to account in a way that was never intended. I appreciate the concern that has been shared by members, but I still believe that it would be a backward step for land reform if members were to support this amendment, which would reduce transparency of ownership and control for some of the largest organisations in scope of the RCI by the number of property titles they hold. Just last week, the chamber debated the need for further changes to address concentration and transparency of land ownership and to support more communities into land ownership. That amendment would cut across that need for transparency. The information that will be available on the Scottish Charity Register under section 2 of the bill is charity trustee names. The RCI relates to transparency in ownership and control of property, and, as such, it requires additional information to simply a list of names. The two registers require different information. They are not the same, and the people who own or tenant the land may not be the same people as the charity trustees. It is not correct to say that the two registers will contain duplicate information, nor is it required further to be any financial cost to make us submission to the register. It is one of the areas that the Government and others are working very carefully and closely with the churches on to see what more can be done to simplify this process to ensure that some of the concerns around the need for legal representation are allayed during this process. Addressing the concerns is a very important part of that, returning to some of the aspects that Murdo Fraser talked about is an issue that I take very seriously, and that is why there is continuing engagement to ensure that we find the appropriate way to support stakeholders and to deal with the issues that members have raised today, but for that not to be done through a carve out, as is being suggested in this amendment. The Scottish Government has already extended the transitional period for compliance by 12 months to 1 April 2024, providing more time to those who need to register with the RCI, a move that gained the unanimous support of this parliament. So, while I appreciate the concerns that have been raised by religious organisations about the RCI, this bill on charity regulation is not the place to change the obligations of the RCI, and I urge members not to support the amendment today. I thank our members for their contribution of this. I should perhaps also declare that I am a member of the Church of Scotland. If I can just respond to a few points made by the Cabinet Secretary in her comments, I think that the issue that perhaps the Scottish Government omission here is in regard to control of property and who controls property. If I can give an example when I, in a previous life, was a Baptist minister, the title deed of the Church of the Manch was always held in the name of the minister, the church secretary and the treasurer, and they were the people who would sign the documentation. In regard to the control of whether that church or that manch could be sold, it was down to the church meeting, it was down to the local congregation to make that choice. The trustee, the owner, the people who would have a name did not have that power to take that decision. The decision was made by the church. When we are talking about who is owning the land, it is not in regard to three individuals whose names are on a title deed. It is a local congregation or a denomination. I think that that point is really important to make. I think that the cost issue is a big one. The Episcopal Church, in its submission to the committee at stage 2, made it clear that, in their view, that would have to be done by lawyers. I welcome what the cabinet secretary has said in her remarks today, but I think that further progress has to be made in regard to that, or we are simply lining the pockets of lawyers. I understand that there is this one-year period, and if the amendment falls this afternoon, I do hope that the Government will not just engage in conversation. Engagement is important, but unless it brings about some change in what is happening on the ground, it is just simply talking for talking's sake and does not get us anywhere. We have this 12-month period. I hope that there can be significant movement by the Scottish Government on that to make sure that there is transparency and openness, but that churches and religious organisations from all faiths can get on and actually do what they are about, which is helping those within the local community. I move the amendment in my name. The question is that amendment 3 be agreed to. Are we all agreed? We are not agreed. There will be a division, as this is the first division of the stage. I am going to suspend briefly for around five minutes until our members access the digital voting system.


Evil people are characterized by being very ego-driven and vain. They are also characterized as being very lust for death and suffering driven.  These three character traits are traits that the God of the Bible, the Torah and the Quran has in a huge abundance. Yes, he does. Okay, my friend, number one, you are not the judge of right and wrong. Number two, it's not wrong for God to desire all the glory because he deserves it. It's actually loving for God to point us to himself because he is the most beautiful thing in the whole universe. We're actually telling a lie when we tell the world to look at us and how amazing we are because we're not. With all that being said, even though Jesus deserves all the glory, he actually humbled himself when he came to this earth to take the penalty we deserve on the cross. So that accusation of God being sinfully prideful is totally ridiculous. They are also characterized as being very lust for death and suffering driven. The Lord is not slow to fulfill his promises as some count slowness, but is patient towards you, not wishing that any should perish, but that all should reach repentance. They have a serve me and enjoy it or die attitude. Lastly, it's important to realize that we are all either a slave to sin or slave to God. We are not merely free agents and God is asking us to submit ourselves to him. No, we are in bondage to sin and God is graciously inviting us to submit ourselves to a new master. One who doesn't just let us sit in our filth but comes in and brings redemption, restoration and a renewed relationship with him. That's good news.


Thank you so much. It's great to be with you here today. My name is Barbara Suetz. I am the Open Educational Resources and Instructional Material Program Manager at our State Department of Education. Just to give you a little bit of context of where I am, I am in the Pacific Northwest region of the United States in Washington State, and just wanted to acknowledge our local tribes and nations. Near as to me are the Squaxon Island, Nisqually, and the Federated Tribes of Shehalis. So a little bit about the K-12 OER project that I direct at our State Department of Education. We really have three big buckets of work. The first is OER awareness and advocacy. The second is actually reviewing OER and assisting districts with the development of open resources. And the third is really maintaining a library of openly licensed resources for sharing across the state and around the world. We call our online repository the Washington OER Hub. It is housed on OER Commons, which I'm sure most of you are quite familiar with. And really our Washington OER Hub is intended as a place to share resources that are created by Washington educators and our collaborators, and also curated for those folks. Our vision is certainly to share resources widely and to promote equitable access of equitable access, I should say, to standards-aligned content. Given the fact that we only have 20 minutes, and I know it goes so quickly, I'm not actually going to jump out to our online platform. But please know that in the notes for this section, I have put a link to that platform, as well as a copy of the slide deck and some additional resources that we'll be talking about in just a second. The way our online platform is organized is really in two big sections. The first section is our working group section, and this is a place that Washington educators that are developing content in collaboration with our State Department of Ed are able to post their materials. We have an area that is administered by our local content experts at the state level, but we also have sections that are administered by our grantees and collaborating organizations throughout the state. So in addition to really robust lessons and units that are being created by Washington educators that we're sharing, we also have added continuous learning collections. And these came about pretty recently with the advent of the pandemic, certainly. We wanted to include additional resources that were from third party sources that weren't necessarily created for Washington, but certainly were pertinent to our educators. And we chose these resources because they were aligned with our learning standards. And most importantly, they had some connection to remote learning, and hopefully also had an integration of different subject areas. We're finding that we have a number of benefits that we are reaping from having this hub on OER Commons. First and foremost, it's really a platform to share resources beyond the level of the individual school or district. For years OSPI has provided OSPI I should say is our State Department of Ed. That's the acronym. We have provided money to districts to create instructional materials, but oftentimes those resources, wonderful as they may be get kind of locked behind a district learning management system, or just kind of left within the realm of one building. And this is really a chance for us to share those resources beyond that level. So it is, as I mentioned before, an opportunity to provide equitable access to content, regardless of the zip code folks happen to be living in. And as it turns out, it really gave us a leg up on getting information out to folks in a distance learning format when that became a necessity just recently. I do want to mention that I have linked on this slide and you'll have that as a resource to our playlist. We've been starting to create little 10 minute YouTube live videos that highlight a particular resource on the hub, so that we can just kind of shine a spotlight on some wonderful resources that are available there. I wanted to talk just a little bit about how we are populating our hub with resources. It's really important to have a pipeline of content that is going to to feed this online site. And there are a number of different ways that we do that. First is by taking a look at existing content that has been created by our State Department of Education, usually through some sort of legislative mandate. A couple of examples here one is our since time immemorial tribal sovereignty curriculum. This is a great resource for educators around the state it is openly licensed and certainly something that can be remixed by folks that would be applicable to their own local tribal population. Another existing material that we have openly licensed is our modeling world with mathematics resource. It's a secondary resource that's designed to follow geometry that really includes thematic units like health and civic readiness and the arts and applies those kind of real world learnings to math. Another area we were able to lean into to kind of acquire content was really reaching out to our external partners and requesting that they openly licensed their materials. Another good example is the work that we've done with the League of Women Voters of Washington to openly license their state of Washington textbook. I'm going to let you click on the other options when you have a chance to review this at your leisure but just know that in addition to those areas we do do collaborative development work with district educator teams to bring their content to the table and work with them to make sure that it is aligned with learning standards and openly licensed and ready for inclusion on the hub. And as I mentioned earlier we've started to curate content from third party sources as well. Another area that a lot of folks were interested in is the competitive grant program that we have. As an incentive for developing openly licensed resources we do provide small seed grants to district teams for the development of either full course or unit level instructional materials. For the requirement they obviously need to be aligned to state learning standards and they are required to openly license the content that they develop and include that on the OER hub. We've been doing this for about five years now about 31 grants have been given out to districts and the numbers that you see here are reflective just of the individual grants or of the direct content with contact with teachers. And students that we've had through the grants. As you know these materials are remixed and shared and spread on a much larger scale. So the numbers that you see here for teachers and student impacts are just in the individual classrooms where the teachers had actually developed the content. We know that the numbers are much higher for the actual distribution of those materials. Taking a look at the findings for the grants. We're certainly seeing the impact of grant funding in a number of different populations teachers and students obviously but we've also had reports from our grantees that parents and policymakers have seen the advantages of the work as well. Taking a big look at the overview of all of the responses that we've got back from our final reports there's some some common benefits that we we can certainly point out. First and foremost being that the development of this openly licensed content is typically the best professional learning that these educators have ever had. The benefit of having an increased pool of standards aligned content. And also what we're really finding now is that we're able to generate content in some underrepresented content areas. We're finding a great deal of really good quality open resources in math and LA science certainly, but areas like health and the arts and world languages are underrepresented out there so we're able to provide grant funds to increase the pool of content in those areas. Not surprisingly, the challenges that our grantees are pointing out are ones that you've all heard before, I know from folks that you're working with the issues of time, certainly is is probably the biggest one, and also just the the comfort level with instructional materials development. And sometimes technical issues, we have different team members that are working on different platforms and that obviously provides a challenge for folks. Teacher and student outcomes, I've got a couple of slides that speak a little bit to that. And that's an area that we would still like to do more research on a quantitative area, a lot of the evidence that we have now as anecdotal in nature. And we'd like to put a few more numbers to things. I pulled some quotes from from some of our most recent round of grantees, because I think they speak to a lot of the benefits that they're seeing, certainly an increased student interest and engagement level. We had a group that was developing STEM content science technology content in Southern Washington, and they saw a reduction in disruptive behaviors in class. They also had class discussions that were certainly a little bit more rigorous than they had seen before. So our grantees have seen improved student performance in terms of meeting standards and and leaning in to conversations to provide evidence for their thinking. And one of the greatest quotes I saw was just from our last round of grantees and then the comment was that the development had proved liberating rather than restricting. And they had really good things to say about the implementation of their developed OER and are excited to share it with other folks. This one in particular was from a physics curriculum full course that they had developed. I should say that there are links to all of our grant projects and reports over the last five years. I've included the link on the copy of the presentation that you'll find in the session description. Another area I wanted to mention too is this idea of cost shifting I know in higher ed we we often talk about a cost savings to the students in K 12 it's really much more of a cost shift that money still gets spent, it does not get, you know, shunted into another area. But what we are finding is that folks are able to move those funds into areas that are also critical for learning and teaching so instead of spending it on the purchase of content they're spending it on release time for teachers, or providing it on time for educators to get together to curate and adapt content. I want to end really quickly with what I think is a really great example of a number of these different content creation streams that are coming together. I mentioned earlier the state were in Washington which was work that we had worked with our external partners to apply an open license to. With the result of doing that we were able to include that work on our Washington hub and then have a grantee district who took up that material, and not only translated it into several different languages for their dual language immersion courses, but really adapted that content so that it met the needs of those particular populations. We were above that we were able to collaborate with school districts on creating teacher guides and inquiry based activities and lessons to accompany that textbook material. And so it was a really nice way to show that open licensing extends the life of a work and and just increases its usefulness for folks. That was a whole lot of information in a very short time. I do want to I think I think I have maybe one minute left if there are any questions I'm happy to answer those. And if we don't get to them here. Please feel free to reach out to me via email or in the we global connect format and I'm happy to talk with folks offline about this work. It's amazing but right just in time we even have four minutes to spare for questions so anybody. Wow, you were perfect, but in any case I have added the follow up. The link for you to connect so they can follow up with you. But if somebody wants to make use of the mic to make a quick question to Barbara. We're good. Thank you so much but I love listen to what you guys are doing in line with now that we're in this stage where we want to facilitate the resources not only for the users but also the creators seeing the type of work that you guys are doing it's just it's just amazing. Thank you very much for sharing. You're welcome. Goodbye everybody have a good rest of your conference.