 Okay, is that microphone working? Okay, great. Yeah, it's about time to start. Wake up again, everybody. Yeah, what I'm talking about today, come on back again to that topic of LibreOffice extensions and the implications they have on us developers doing our work or how they sometimes hinder us. So to see what the issue is with extensions, that's the same boobly that earlier today was all in praise of extensions, how they help us by keeping all this extra stuff out of our way, of the developer's way. But of course there's also implications to that and in the end nobody of us developers does love extensions. Because yeah, what's the summary? They keep getting into our way, we always need to make sure, take care that those points where the extensions can interact with the core that these points keep working. And it's not even always easy to tell what these points exactly are and whether if you do something you'll actually break them in a way that extensions no longer will work. For example, do you spot the error in the previous conversation? Torsten, do you? No. The error in there, the back, where's the thing that, that's not an ADI problem with the LED and the light bulbs because the LED bulb is a perfect replacement for the light bulb. No problem. From the interface perspective it is. And that counts here. If anybody is curious what we developers do all the day then come join us on our ISE channel and you'll get a quite different picture of what you might have thought the developers are doing for a day job. So yeah, as that example shows, it's sometimes difficult to tell if that incompatible will that prove to be a problem for our extensions or not. Then on the other side of the divide there's the users and the extension authors and they send bug reports. This is one random example more or less. Something stopped working. The interesting bit about this bug report is that it is due to some commit that I did. That's not the interesting part. There's more of those. The interesting part is that I thought long and hard about whether actually doing this change would be compatible or incompatible and what this boils down to is that in our C++ code we have different types representing the UNO types and there's one type for a UNO character and that used to be the same type as the one we used for the small unsigned integer types and because C++ wasn't expressive enough in its type system to have different types for these so they were combined into one. Come along C++11 with a new type for larger characters so we finally were able to split these two into two. That makes the code easier. There's some special cases in the code that can go away. There's even some bugs lurking in the code because one type was used of the other one in places where it shouldn't be. On the interface for C++ extensions I checked carefully that there was no place where this would cause any problems so there shouldn't be any problems with C++ extensions but as it turned out it caused a problem for basic code because there was a bug in the writer core C++ code. There is one case where you can have a value that is a single character. You usually don't have that because it doesn't make much sense anyway with Unicode to speak about single characters that have the F16 values but there was one case where there was some separator for some sorting and I don't know and the bug in writer was that it used the integer type instead of the character type and the problem with basic is that it doesn't have a character type either so it puts in when you want to use that interface for basic you put in an integer value representing the character and now suddenly writer started to no longer accept an integer there but insisted on having a character and that broke it and there was no way for basic to fix that in basic and put in a character so first I thought oh my god I broke everything because now with that change now there's no longer any interoperability between the basic code and the writer code but then I checked carefully that there's just one place where things go wrong and I said oh I'll just fix that and sweep it on the carpet and you'll never know about that issue so again to summarize the other side of the divide between the users and the extensions authors they don't like incompatible change of course and again it's sometimes quite hard to tell whether a change is compatible or incompatible you try to do your best and still you get it wrong so coming back to the start of the talk this is where we are having problems with these beloved extensions but we as core developers I mean I for one can't even operate the impressed part to create decent slides and far less do I know what people out there use LibreOffice to create extensions and stuff like that so extensions for core developers are always these scared beasts out there in the wild that you rarely do spot and you don't know much about them so is this caring about extensions thinking oh my god I'll have to be careful to not break anything there because it's something that is legend tells that it is a place where extensions plug in it's better all wasted fears because we don't even have any extensions or are all these extensions so ugly that you don't want to care about them anyway so yeah I wanted to learn on what side of this guinea pig why we are, whether we are the ugly one or the more beautiful one so went to the new or newly revamped Andreas not here, no he did most of the work there to get our extension side into better shape again into decent shape and yeah let's look at what we actually have and if you try to list all these extensions that are out there on this official kind of page then you get to the number of 308 ones that we have and that should be an interesting sample to look at so what I did, whistled a little downloaded all these or tried to download them all through the website the issue is that you can either host them on the website directly or have them on your own and linked to that but sometimes there were no links or at least I was too dumb to find those links so 71 of them I couldn't find any artifacts to download maybe Andreas if he were here would know where I went wrong for others I tried hard to do find some even went in two cases to that source for abomination and found the stuff there but long story short the rest of them there was some some kind of noise around there some things that weren't packaged up correctly I guess it's quite hard for somebody who wants to produce a dictionary for LibreOffice to actually do the final steps of creating this OXT file there's some details in there that are difficult so some people put up other artifacts there only a small percentage so many of our extension authors are great in having overcome that not small hurdle of actually producing such an OXT file and of those 228 remaining that I downloaded and looked into into their manifest files the picture is that 81 of them don't include any code at all so they are typically they are dictionaries or gallery images and what you need to do there is provide the pure data plus some configuration data that tells LibreOffice where the files in this extension are like telling LibreOffice that there is a dictionary file contained in that so there's always some configuration data in every extension but many many many of them just contain that and nothing more and people are happy with that then there were also 81 that just contained basic code besides also containing configuration data typically all of them typically do so 81 just contained basic 28 were Python some kind of letter up in the complexity of these languages probably 22 were Java there were five that you're scripting in some way mostly Python again and just four of them were C++ where we have the most fears of breaking anything and that included even two different versions of the same extension that we even built bundled with LibreOffice itself and you build it there we built the code so that's an easy one to keep track of and seven of them I don't know what was in there I couldn't find anything so my scripting maybe was broken so that's quite reassuring for us that most of them make very little use of the points that we offer for plug-in and the ones that actually even do like the basic ones we have that well under control because the basic code is part of the LibreOffice code or the code to execute basic is ours to control so if we find out that we break something badly there we could always build and scaffolding there to alleviate these problems and make them go away again and ironically the things that we as developers think about most when we think about do we break anything with an incompatible change that's the one that in practice matter the least I don't know if there's beyond those few that are actually in the extension store if there's a larger corpus of C++ extensions out there don't go away and that's kind of what I wanted to tell you today the message is let's forget about ABI today if everything goes not exactly I think it's open season outside maybe you still don't want these three to four people out there doing the extensions I'm not sure how much we want to eliminate them but yeah well I think there are two parts of their story and the most important part we don't want that we don't sorry I was busy with the whole setup oh that's working like a charm if you know what to do yeah that's another sure I mean I was impressed by the actual by the number of actually working extensions there because as I said it's hard to do these and all my sympathy to these people out there who feel the pain during these Torsten so at least I would say looking at the open office extension in the repository I know there's a number of those sorts of proprietary actually well if the confusion is there's nothing or there's just four and then if you go if you make decisions based on that confusion then perhaps the data should be more I know at least two C++ C++ binding and it's rather generic open office binding and historical German dictionary yeah but the problem is always as I said we don't know much about them we don't hear much about them as long as they work we don't hear anything many of them apparently even don't come to us if things start to break so it's really difficult for us to draw anything from that but there was one more question over here so I think we're running late so if you can although it's basic they're all used you know underneath right? yes there is basic is different in that it has a more direct access but you can also use the you know things from basic and the interoperability things is mostly about the you know parts so the rest of this basic runtime is rather not relevant to this discussion here basic I can also do in all the other languages yeah okay thank you