1
00:00:00,080 --> 00:00:02,320
I completely hated these 
technologies initially. 

2
00:00:02,320 --> 00:00:06,320
Java seems large, low 30. 
The way cloud native development

3
00:00:06,320 --> 00:00:09,480
was going, it was clear that the
direction Java was taking was 

4
00:00:09,480 --> 00:00:11,160
just not compatible with this 
new feature. 

5
00:00:11,320 --> 00:00:14,560
There was a strong concern that 
the Java would still be alive in

6
00:00:14,560 --> 00:00:17,560
10 years about. 
Java back then people associated

7
00:00:17,560 --> 00:00:20,240
as a heavyweight. 
Has Java become a valid choice 

8
00:00:20,240 --> 00:00:21,440
for like cloud native 
application? 

9
00:00:21,680 --> 00:00:24,000
We do have a quarkless version 
for serverless. 

10
00:00:24,480 --> 00:00:27,160
It starts in milliseconds. 
How do you compare Java now with

11
00:00:27,280 --> 00:00:29,200
my modern programming languages 
Rasco? 

12
00:00:29,640 --> 00:00:31,800
What are still some of the 
strengths that Java has that 

13
00:00:31,800 --> 00:00:34,320
people should consider? 
They honestly think Java is in a

14
00:00:34,320 --> 00:00:37,240
very very good position. 
People maybe don't realize it, 

15
00:00:37,240 --> 00:00:38,560
right? 
At the moment, if you're still 

16
00:00:38,560 --> 00:00:40,920
active in the hibernate, how 
many contributors are there? 

17
00:00:40,920 --> 00:00:43,440
We just changed the license of 
Hibernatorium. 

18
00:00:44,000 --> 00:00:47,360
We had to contact every single 
contributor ever that made some 

19
00:00:47,360 --> 00:00:49,000
meaningful contribution for 
projects. 

20
00:00:49,360 --> 00:00:50,920
It's like more than 2000 
contributors. 

21
00:00:51,440 --> 00:00:54,160
There's such thing as politics 
in open source project. 

22
00:00:54,280 --> 00:00:57,160
I think there is, but there 
certainly are strong opinions. 

23
00:00:57,400 --> 00:00:59,840
Many programming languages now 
support some kind of ORM 

24
00:00:59,840 --> 00:01:02,400
library. 
Some people like it, some people

25
00:01:02,400 --> 00:01:04,400
really hate it. 
What is your opinion? 

26
00:01:05,200 --> 00:01:07,080
There are lots of hybrid haters,
right? 

27
00:01:07,280 --> 00:01:11,720
There is a large group of people
that sadly have been both hybrid

28
00:01:11,720 --> 00:01:13,440
at the wrong way. 
And then of course, there is a 

29
00:01:13,440 --> 00:01:16,720
category of people that's. 
ORM widely adopted. 

30
00:01:16,720 --> 00:01:19,040
When do you think it's not the 
right time to use like ORM or 

31
00:01:19,040 --> 00:01:20,440
Hymony? 
I might be biased. 

32
00:01:22,120 --> 00:01:40,700
I would always start from. 
Hello guys. 

33
00:01:40,700 --> 00:01:43,700
I think this is our first time 
having technical journal 

34
00:01:43,700 --> 00:01:45,860
recording, in person podcast 
recording. 

35
00:01:46,240 --> 00:01:50,880
So as the first honorary guest, 
we have Sunny in this studio 

36
00:01:50,880 --> 00:01:54,760
today. 
Sunny is a long time open source

37
00:01:54,760 --> 00:02:00,640
contributor with Hibernate, 
Quakers and an infinite Span, so

38
00:02:00,640 --> 00:02:03,840
many projects. 
He has been a long timer in Red 

39
00:02:03,840 --> 00:02:05,840
Hat as well, probably about 16 
years. 

40
00:02:06,440 --> 00:02:08,000
And he is travelling to 
Singapore. 

41
00:02:08,240 --> 00:02:11,680
So we had a good chance to 
actually speak to him and ask 

42
00:02:11,680 --> 00:02:14,520
him about his journey. 
So welcome to this first in 

43
00:02:14,520 --> 00:02:17,760
person podcast recording, right 
Sunny in the beginning. 

44
00:02:17,760 --> 00:02:20,680
I always love to invite my 
guests to maybe share a little 

45
00:02:20,680 --> 00:02:23,880
bit about your career, 
especially turning points that 

46
00:02:23,880 --> 00:02:27,560
you think we can learn from you.
Yeah, yeah, fantastic. 

47
00:02:27,680 --> 00:02:31,600
So when I was at university, I 
was in, in Italy finishing my 

48
00:02:31,600 --> 00:02:36,520
studies and I once, you know, 
professors had, they would 

49
00:02:36,520 --> 00:02:40,200
assign students to some 
practical jobs as well at the 

50
00:02:40,200 --> 00:02:43,480
end of that. 
And so I got involved into a 

51
00:02:43,480 --> 00:02:46,680
big, very large Java project, 
which was using a Java 

52
00:02:46,680 --> 00:02:49,000
enterprise at the time deploying
on Jboss. 

53
00:02:49,760 --> 00:02:52,240
I completely hated these 
technologies initially. 

54
00:02:52,240 --> 00:02:55,680
Like it was like, oh, Java seems
large, bloated. 

55
00:02:55,680 --> 00:02:58,440
It takes ages to deploy 
something and get feedback like 

56
00:02:58,440 --> 00:03:01,440
I'm on the right path. 
Of course, everything was new to

57
00:03:01,440 --> 00:03:04,360
me. 
And so the fact that to to know 

58
00:03:04,360 --> 00:03:07,920
that some code that was actually
going to work as expected needed

59
00:03:07,920 --> 00:03:11,640
to go through this entire cycle 
of deployment, that was painful.

60
00:03:12,440 --> 00:03:17,960
So very quickly I put down 
scripts to deploy this faster on

61
00:03:17,960 --> 00:03:20,720
the application server and you 
know, to, to do all these kind 

62
00:03:20,720 --> 00:03:23,800
of things and you realise it's 
open source and you can read it.

63
00:03:24,280 --> 00:03:27,600
So you Start learning a lot 
about the platform and how to 

64
00:03:27,600 --> 00:03:31,120
work better with it. 
And well, that project, it went 

65
00:03:31,120 --> 00:03:34,680
from being extremely large and 
slow and complicated to 

66
00:03:34,680 --> 00:03:36,400
something that I really like 
doing. 

67
00:03:37,160 --> 00:03:40,760
And so very quickly I was, I 
became from being like the 

68
00:03:40,760 --> 00:03:43,480
junior guy that Barry knew some 
Java to actually lead the 

69
00:03:43,480 --> 00:03:48,480
project. 
And then well, there was a bit 

70
00:03:48,480 --> 00:03:54,080
of a competition, like a Red Hat
was looking for interesting use 

71
00:03:54,080 --> 00:03:55,800
cases to share to their 
customers. 

72
00:03:56,000 --> 00:03:59,880
And so I wrote down what we had 
done with the project and we won

73
00:03:59,880 --> 00:04:03,320
an innovation award. 
So they sent me to Orlando to 

74
00:04:03,320 --> 00:04:07,080
get this award. 
It was a bit weird because I was

75
00:04:07,080 --> 00:04:11,880
like very young and suddenly and
they are between all the, you 

76
00:04:11,880 --> 00:04:13,160
know, these guys that are my 
heroes. 

77
00:04:13,160 --> 00:04:16,000
Like these are like the Java 
developers that actually created

78
00:04:16,000 --> 00:04:19,040
these technologies. 
But they were all like very like

79
00:04:19,880 --> 00:04:23,040
level where they they would, 
they were interested to hear my 

80
00:04:23,040 --> 00:04:26,320
about my experience and then 
also about the problems that I 

81
00:04:26,320 --> 00:04:27,720
had. 
And then, you know, they 

82
00:04:27,720 --> 00:04:29,760
immediately started 
brainstorming with me, Oh, how 

83
00:04:29,760 --> 00:04:31,040
can we fix these things? 
Right? 

84
00:04:31,640 --> 00:04:34,680
Yeah, that that was like an 
amazing impression for me. 

85
00:04:34,680 --> 00:04:37,800
So then I immediately knew like,
oh, OK, these projects are 

86
00:04:37,920 --> 00:04:40,360
really amazing. 
Like they're being used so many 

87
00:04:40,360 --> 00:04:42,680
places. 
They're solving so many problems

88
00:04:43,440 --> 00:04:45,480
and they have ideas that are 
evaluated there. 

89
00:04:45,480 --> 00:04:49,240
Like they want to to hear about 
those and they also want me to 

90
00:04:49,240 --> 00:04:54,240
fix them. 
Say innovation award, what kind 

91
00:04:54,240 --> 00:04:56,200
of project that you actually 
built back then? 

92
00:04:56,200 --> 00:04:59,120
Yeah, That was a library 
management system for the 

93
00:04:59,280 --> 00:05:02,760
Italian government. 
It was a very complicated, big 

94
00:05:02,760 --> 00:05:05,200
project. 
So it starts from like the basic

95
00:05:05,200 --> 00:05:09,080
things like people need to loan 
a book and so, you know, you 

96
00:05:09,080 --> 00:05:13,080
need to just record who was the 
person that took a certain book 

97
00:05:13,080 --> 00:05:16,400
and it brings it home. 
But it was also like the central

98
00:05:16,400 --> 00:05:19,920
catalog for the national system.
So if somebody wrote a new book,

99
00:05:19,960 --> 00:05:22,160
it needs to be assigned an ESBN 
code. 

100
00:05:22,160 --> 00:05:24,640
And there is a whole official 
process behind. 

101
00:05:25,280 --> 00:05:28,880
And so, yeah, the complexity of 
the thing was, you know, much 

102
00:05:28,880 --> 00:05:30,880
higher than what you would 
expect if somebody is not 

103
00:05:30,880 --> 00:05:34,160
working that domain. 
So we had something like 1200 

104
00:05:34,160 --> 00:05:37,160
different database tables. 
And I remember, you know, 

105
00:05:37,280 --> 00:05:40,720
statistics that I had to write 
for this paper for the award, 

106
00:05:40,880 --> 00:05:43,840
like we had more than 2000 
different web pages. 

107
00:05:44,360 --> 00:05:47,800
You know, this was all running 
at the time on Jboss application

108
00:05:47,800 --> 00:05:53,320
server, Hibernate, Hibernate 
Search, that was a key project 

109
00:05:53,320 --> 00:05:57,320
from my career because Hibernate
Search had just been pretty much

110
00:05:57,320 --> 00:06:00,800
created as a prototype by 
Emmanuel Bernard, who's a big 

111
00:06:00,800 --> 00:06:02,720
friend of mine and became my 
mentor later. 

112
00:06:03,800 --> 00:06:05,840
So it was like a prototype. 
He was doing some of the 

113
00:06:05,840 --> 00:06:08,880
essential things which were like
absolutely key for my project. 

114
00:06:08,920 --> 00:06:11,880
Like we would not have succeeded
in doing anything if Hybrid 

115
00:06:11,880 --> 00:06:15,000
Search had not existed there. 
But at the same time it was 

116
00:06:15,000 --> 00:06:17,640
missing some things which are 
absolutely critical for us. 

117
00:06:18,080 --> 00:06:21,840
So really for my project to 
succeed, it was essential for us

118
00:06:21,840 --> 00:06:24,480
when we were working on this 
library system that we 

119
00:06:24,480 --> 00:06:26,240
implemented these missing 
features. 

120
00:06:26,920 --> 00:06:30,360
And then of course at some point
I promised them I know I would 

121
00:06:30,640 --> 00:06:34,280
open source that components and 
push them to Hypernet Search. 

122
00:06:35,120 --> 00:06:38,440
So you mentioned you met some of
your Java heroes, right? 

123
00:06:38,440 --> 00:06:40,080
So can you? 
Yes. 

124
00:06:40,240 --> 00:06:44,040
Who are some of your heroes? 
Oh, back then, yeah. 

125
00:06:44,040 --> 00:06:45,600
I mean, I have lots of heroes 
today. 

126
00:06:47,480 --> 00:06:50,480
So, yeah, when when I when I 
arrived at Orlando, I was very 

127
00:06:50,480 --> 00:06:52,960
keen to meet some of them. 
I I remember. 

128
00:06:53,320 --> 00:06:55,000
Yeah, Emmanuel, of course, was 
there. 

129
00:06:55,320 --> 00:06:59,720
Bellaban, he was, he still is 
today, the leader of the Jacobs 

130
00:06:59,720 --> 00:07:02,360
project. 
I think I met him there. 

131
00:07:02,480 --> 00:07:06,360
I might confuse some events now.
There was Andy Miller. 

132
00:07:06,360 --> 00:07:10,240
He was director for the 
performance team at JBOS. 

133
00:07:10,360 --> 00:07:14,040
And one of the big problems we 
had with our system was of 

134
00:07:14,040 --> 00:07:16,800
course, making sure that the 
system would perform at the 

135
00:07:16,800 --> 00:07:18,920
level that the customer was 
expecting. 

136
00:07:19,200 --> 00:07:22,520
It initially did not at all. 
We had made lots of mistakes and

137
00:07:22,520 --> 00:07:25,480
I had to learn really quickly 
again as a, you know, complete a

138
00:07:25,480 --> 00:07:29,960
junior person facing Java for 
the first time about profiling 

139
00:07:29,960 --> 00:07:31,800
tools and hold what's behind 
that. 

140
00:07:32,520 --> 00:07:35,200
So when I get there and I see 
presentations from this person, 

141
00:07:35,200 --> 00:07:38,800
which is giving me a lot of 
clarifications, a lot of really 

142
00:07:38,800 --> 00:07:41,160
good hints, pretty much for 
free. 

143
00:07:41,160 --> 00:07:42,520
Like these conferences are 
amazing. 

144
00:07:42,520 --> 00:07:47,360
They're just, they're to just 
honest sharing of knowledge for 

145
00:07:49,200 --> 00:07:53,840
just very, very good. 
So yeah, after that, I, I go 

146
00:07:53,840 --> 00:07:56,920
back to Italy with a lot of new 
knowledge, a lot of new friends,

147
00:07:56,920 --> 00:08:00,160
a lot of network promises of 
contributions back. 

148
00:08:00,480 --> 00:08:02,000
But I wasn't working for Red 
Hat, right? 

149
00:08:02,000 --> 00:08:05,120
I was working for these other 
companies and well, I realized 

150
00:08:05,120 --> 00:08:08,640
that I actually know a lot of 
things about Hibernate itself. 

151
00:08:08,640 --> 00:08:10,600
And you know, all these things 
I'm doing with Hibernate Search,

152
00:08:10,600 --> 00:08:15,520
they needed to dive really deep 
and understand things more as a 

153
00:08:15,520 --> 00:08:18,000
framework implemented and as a 
as a user. 

154
00:08:18,280 --> 00:08:21,120
So I quickly started with a 
career in consulting. 

155
00:08:21,760 --> 00:08:23,760
That was a good career 
acceleration. 

156
00:08:24,200 --> 00:08:27,600
I've been working in banks. 
I was like a lead architect for 

157
00:08:28,000 --> 00:08:31,680
like a technology choices in one
of the major Italian banks I 

158
00:08:31,680 --> 00:08:36,440
worked at for, for Sourcesense, 
which was very cool, very small,

159
00:08:36,440 --> 00:08:39,679
very selective company in Italy 
about they wanted to have like 

160
00:08:39,679 --> 00:08:43,679
the brightest minds in the open 
source ecosystem and you know, 

161
00:08:43,679 --> 00:08:46,800
sell premium expertise as 
consultants. 

162
00:08:47,480 --> 00:08:52,840
I did that just a year. 
Like I, I started like very, 

163
00:08:52,840 --> 00:08:58,920
very loving this group, but then
I had to work often in a bank 

164
00:08:59,200 --> 00:09:03,120
which they really valued us. 
But at the same time, this bank 

165
00:09:03,120 --> 00:09:07,120
had the firewall and from within
we could not use Internet, 

166
00:09:07,680 --> 00:09:11,480
completely not allowed. 
And you know, they're big, very 

167
00:09:11,480 --> 00:09:15,240
legacy, big systems complicated.
They would come to me like I was

168
00:09:15,240 --> 00:09:19,600
a guru of these things and ask 
me questions that I needed to do

169
00:09:19,600 --> 00:09:23,080
more research. 
And so, you know, you would need

170
00:09:23,080 --> 00:09:26,080
to do that at home and then 
research and then go back. 

171
00:09:26,440 --> 00:09:29,640
So I also like disappeared from 
this network from the open 

172
00:09:29,640 --> 00:09:34,360
source world because I was 
always firewalled out of the 

173
00:09:34,360 --> 00:09:36,800
rest of the world. 
And the Hibernate team was 

174
00:09:36,800 --> 00:09:38,520
missing me. 
Like they were like, oh son, 

175
00:09:38,520 --> 00:09:43,320
where, where are you? 
And so I explained the situation

176
00:09:43,440 --> 00:09:45,560
and then they said, well, why 
don't you come work for us full 

177
00:09:45,560 --> 00:09:49,760
time? 
And so, you know, that was very 

178
00:09:49,760 --> 00:09:52,320
interesting for for me, like, 
oh, I could join these people 

179
00:09:52,320 --> 00:09:55,160
and work with them. 
And so I accepted that 

180
00:09:55,160 --> 00:09:57,360
immediately. 
Yeah, since we're talking about 

181
00:09:57,360 --> 00:09:59,560
careers here, I did a big 
mistake there as well. 

182
00:10:00,600 --> 00:10:03,560
I I was so keen to join them 
that they actually took a 

183
00:10:03,560 --> 00:10:07,360
massive packet. 
And I thought, well, you know, 

184
00:10:07,360 --> 00:10:09,440
it doesn't matter. 
I really want to, you know, I 

185
00:10:09,440 --> 00:10:13,600
would work for three years. 
We'll, you know, we'll address 

186
00:10:13,600 --> 00:10:16,960
that later. 
And it wasn't dressed later. 

187
00:10:16,960 --> 00:10:19,640
Like I clearly, I mean, that put
me very low in the ladder there.

188
00:10:19,640 --> 00:10:22,080
And then I realized I was a bit 
more senior than that. 

189
00:10:22,480 --> 00:10:24,880
So it was fixed. 
But it has been fixed very 

190
00:10:24,880 --> 00:10:27,360
slowly over the years. 
Because of course, once you are 

191
00:10:27,360 --> 00:10:30,200
inside a big company, there are 
all kinds of rules like I can't 

192
00:10:30,200 --> 00:10:32,520
hear, just hear double your 
salary overnight today. 

193
00:10:32,600 --> 00:10:35,960
Oh, we need to do this 5% here 
and 5% over there. 

194
00:10:36,360 --> 00:10:40,280
So it took some time and yeah, 
thinking in retrospect, I 

195
00:10:40,280 --> 00:10:42,840
probably, you know, they didn't 
have the budget at that moment. 

196
00:10:42,840 --> 00:10:45,240
I probably could have said, 
well, let's talk in two months, 

197
00:10:45,240 --> 00:10:48,800
you know, and that would have 
been better for everybody. 

198
00:10:48,880 --> 00:10:52,160
But yeah, I was so keen to join 
them and learn more and just 

199
00:10:52,160 --> 00:10:53,680
work full time on those 
projects. 

200
00:10:54,360 --> 00:10:55,920
But I I said, well, let's do 
that. 

201
00:10:56,920 --> 00:11:01,760
And maybe that was a good thing.
So I think one unique thing that

202
00:11:01,760 --> 00:11:05,120
you just shared with us, right, 
you contributed to open source 

203
00:11:05,120 --> 00:11:07,360
since very early in your career,
right? 

204
00:11:07,400 --> 00:11:10,880
Since you know, maybe you won 
the award and you got into 

205
00:11:10,880 --> 00:11:14,040
Hibernate, Hibernate Search, 
maybe you kind of Ditto a bit to

206
00:11:14,040 --> 00:11:16,120
like banks and all that. 
But you have always been 

207
00:11:16,120 --> 00:11:19,400
contributing in the open source,
which I find maybe for some 

208
00:11:19,400 --> 00:11:22,640
people it's rare because they 
think you might need experience,

209
00:11:22,760 --> 00:11:25,600
understand a little bit of 
fundamentals and technical 

210
00:11:25,600 --> 00:11:27,680
details before you can 
contribute to open source. 

211
00:11:28,120 --> 00:11:30,480
So maybe can you share a little 
bit back then? 

212
00:11:31,000 --> 00:11:34,040
Do you find it challenging as a 
youngster, you know, 

213
00:11:34,040 --> 00:11:36,720
contributing to a big open 
source, you know, like Hibernate

214
00:11:36,720 --> 00:11:39,280
and all that? 
Or do you actually find it's 

215
00:11:39,280 --> 00:11:42,960
actually useful for your career?
Oh, it definitely was useful for

216
00:11:42,960 --> 00:11:46,400
my career and it was 
challenging, but it wasn't that 

217
00:11:46,400 --> 00:11:49,240
early in my career to premise 
like I had been studying a 

218
00:11:49,240 --> 00:11:51,520
university degree, which is in 
Italy. 

219
00:11:51,520 --> 00:11:53,760
It's like it's called like the 
old system. 

220
00:11:53,760 --> 00:11:57,240
So university degrees were far 
longer, so they would go much 

221
00:11:57,240 --> 00:12:00,920
deeper and I was busy with that.
So it was a kind of advanced 

222
00:12:00,920 --> 00:12:03,080
course, right? 
So many of the fundamentals were

223
00:12:03,080 --> 00:12:06,080
kind of note to me. 
Java, I was not a professional 

224
00:12:06,080 --> 00:12:08,920
in the Java space, of course, 
because universities, they don't

225
00:12:08,920 --> 00:12:11,920
really teach you the practical 
ways of things like, so for 

226
00:12:11,920 --> 00:12:15,040
example, making a library, 
that's something that I would 

227
00:12:15,160 --> 00:12:17,320
have never seen. 
And I think it was a library 

228
00:12:17,360 --> 00:12:21,600
like something that on the side.
So that was new to me or like a 

229
00:12:21,600 --> 00:12:23,960
build systems, right? 
You would not really use those 

230
00:12:23,960 --> 00:12:27,480
in like university systems. 
But I, since I was working also 

231
00:12:27,480 --> 00:12:31,320
the in source science and in 
this other contractor positions,

232
00:12:31,520 --> 00:12:36,440
I had been exposed also to agile
practitioners, extreme 

233
00:12:36,440 --> 00:12:38,880
programming practitioners and 
participated in these 

234
00:12:38,880 --> 00:12:42,080
communities. 
And I had some really good 

235
00:12:42,080 --> 00:12:46,000
mentors as well helped me. 
So I was becoming really quickly

236
00:12:46,000 --> 00:12:51,120
familiar with these projects and
then and only then this open 

237
00:12:51,120 --> 00:12:53,480
source things happened. 
Right. 

238
00:12:54,440 --> 00:12:58,000
If I look back at my career back
then, actually Hibernate was 

239
00:12:58,080 --> 00:13:00,520
kind of like released early in 
my career. 

240
00:13:01,040 --> 00:13:02,800
To me back then, it was like a 
revelation. 

241
00:13:02,800 --> 00:13:06,440
You know, usually we wrote like,
I don't know, like JDBC driver, 

242
00:13:06,920 --> 00:13:10,520
plain sequel, then come ibatis, 
Mybatis, right? 

243
00:13:11,160 --> 00:13:14,960
And then Hibernate came, became 
like the de facto ORM. 

244
00:13:15,360 --> 00:13:17,120
So to me, that was like magical,
right? 

245
00:13:17,200 --> 00:13:20,520
Oh, what do you mean? 
You can write just plain simple 

246
00:13:20,520 --> 00:13:23,920
Java object and you can 
translate to SQL queries just by

247
00:13:23,920 --> 00:13:25,760
itself. 
I mean, back then it was like 

248
00:13:25,760 --> 00:13:28,360
magical, right? 
So having been in that project 

249
00:13:28,920 --> 00:13:32,800
for that long, right, What is 
the state of this Hibernate 

250
00:13:32,800 --> 00:13:35,760
project now? 
Is ORM widely adopted? 

251
00:13:35,760 --> 00:13:39,560
Is it like the standard practice
for Java developers these days? 

252
00:13:39,560 --> 00:13:41,600
So tell us maybe a little bit 
more insight. 

253
00:13:41,600 --> 00:13:45,480
So it's a great question. 
We do have download statistics 

254
00:13:45,760 --> 00:13:50,000
and it's doing incredibly well. 
Like we are in the dozens of 

255
00:13:50,000 --> 00:13:54,240
millions of downloads per month.
Problem is we don't know what 

256
00:13:54,240 --> 00:13:57,040
people do with it. 
So for all I know, it might be 1

257
00:13:57,040 --> 00:13:59,400
script somewhere that's Downing 
it a million times per day. 

258
00:14:00,520 --> 00:14:04,960
Good here in practice we do know
of course via read that we have 

259
00:14:04,960 --> 00:14:07,520
customers that we know they're 
using it because they open 

260
00:14:07,520 --> 00:14:09,520
support tickets, they ask 
questions, they ask 

261
00:14:09,520 --> 00:14:12,800
clarifications, they ask for 
like road map plans, they 

262
00:14:12,800 --> 00:14:15,160
suggest features. 
So we know there is a, a lot of 

263
00:14:15,160 --> 00:14:18,000
activity there. 
We are not the first line of 

264
00:14:18,000 --> 00:14:19,880
support, but there are like 3 
lines. 

265
00:14:20,160 --> 00:14:23,480
So there is lots of people 
answering, you know the the most

266
00:14:23,480 --> 00:14:25,520
common questions they they don't
want to bother us. 

267
00:14:25,520 --> 00:14:28,000
And there is a second line of 
people more expert for the more 

268
00:14:28,000 --> 00:14:31,040
difficult questions. 
And only the maximum escalation 

269
00:14:31,040 --> 00:14:32,800
level comes to our team direct, 
right? 

270
00:14:33,360 --> 00:14:35,720
So even there, we struggle 
getting a bit of feedback from 

271
00:14:35,720 --> 00:14:38,600
the front, let's say, but just 
looking at the sizes and it 

272
00:14:38,600 --> 00:14:41,720
starts there. 
We do know it's heavily used, 

273
00:14:41,720 --> 00:14:44,360
right? 
And then there are community 

274
00:14:44,360 --> 00:14:48,240
report researchers that try to 
get a bit of a breakdown of what

275
00:14:48,240 --> 00:14:51,720
community happening from those. 
It seems that the S Hibernate is

276
00:14:51,720 --> 00:14:55,480
very widely used and it has an 
extremely large market share 

277
00:14:55,480 --> 00:14:57,200
noise. 
They're always a bit biased. 

278
00:14:57,200 --> 00:14:59,760
You know, each of these vendors,
they ask their community, their 

279
00:14:59,760 --> 00:15:02,120
section. 
So it's a bit difficult to have 

280
00:15:02,320 --> 00:15:06,200
the full picture or even like 
what's the error range in this 

281
00:15:06,200 --> 00:15:08,760
measurements. 
But we're very confident that's 

282
00:15:09,000 --> 00:15:12,680
pretty much every Java developer
has heard of it, you know, or 

283
00:15:12,680 --> 00:15:14,680
used it at least once in some 
projects. 

284
00:15:15,560 --> 00:15:18,960
I guess that also depends 
because back then, right, I must

285
00:15:18,960 --> 00:15:22,680
admit I have left Java world 
for, I don't know, maybe 10 

286
00:15:22,680 --> 00:15:25,520
years or maybe around that time 
by now, right? 

287
00:15:25,520 --> 00:15:29,320
So back then, like Spring Boot 
was the kind of like the main 

288
00:15:29,320 --> 00:15:31,480
framework for us to build any 
kind of application. 

289
00:15:31,480 --> 00:15:34,000
It could be recipe and micro 
service, whatever that is, 

290
00:15:34,000 --> 00:15:35,480
right? 
And Spring Boot by default 

291
00:15:35,760 --> 00:15:39,080
package Hibernate as their GPA 
of choice or something like 

292
00:15:39,080 --> 00:15:41,280
that, right? 
Maybe that could also be the 

293
00:15:41,280 --> 00:15:44,600
driver for, you know, the number
of downloads because every time 

294
00:15:44,600 --> 00:15:47,600
you build Spring Boot apps it 
downloads those kind of stuff. 

295
00:15:48,520 --> 00:15:54,080
Yeah, we like Spring. 
The the Spring group is a bit of

296
00:15:54,080 --> 00:15:57,240
a competition to Jboss and Red 
dot, but they're also like big 

297
00:15:57,240 --> 00:16:01,600
friends in the way that you know
the they understand that Spring 

298
00:16:01,600 --> 00:16:03,920
wouldn't be as useful without 
Hibernate and we totally 

299
00:16:03,920 --> 00:16:05,960
understand that Hibernate 
wouldn't be as popular without 

300
00:16:05,960 --> 00:16:10,000
Spring, right. 
So there is very respectful back

301
00:16:10,000 --> 00:16:11,760
channel communications between 
them. 

302
00:16:12,080 --> 00:16:15,560
I am a little bit sad that 
sometimes by how they advertise 

303
00:16:15,560 --> 00:16:18,760
some things. 
And one problem that we have in 

304
00:16:18,760 --> 00:16:22,120
the relation is that like we are
allowed, it's even in our 

305
00:16:22,120 --> 00:16:24,240
employment contract, we are 
allowed to contribute to any 

306
00:16:24,240 --> 00:16:26,520
open source project ever when we
want to. 

307
00:16:26,880 --> 00:16:28,360
We don't have to ask for 
permission. 

308
00:16:28,360 --> 00:16:29,920
It's clarified like this in the 
contract. 

309
00:16:30,360 --> 00:16:32,200
It doesn't matter which project 
it is. 

310
00:16:32,200 --> 00:16:33,560
It can even be a competitors 
project. 

311
00:16:34,680 --> 00:16:36,280
Other engineers are not that 
fortunate. 

312
00:16:36,480 --> 00:16:38,640
We we understand that. 
So there there is a bit of this 

313
00:16:38,640 --> 00:16:42,760
sad thing that I know the Spring
team sometimes would like us to 

314
00:16:42,760 --> 00:16:45,480
make some changes. 
And it's always a bit of a 

315
00:16:45,480 --> 00:16:47,920
difficult conversation because 
they can send patches. 

316
00:16:47,960 --> 00:16:51,360
It's not allowed for them. 
And then, you know, for us, it's

317
00:16:51,360 --> 00:16:53,160
a bit tricky to understand what 
exactly you mean. 

318
00:16:54,640 --> 00:16:57,800
And some members of the 
Hibernate team, they really 

319
00:16:57,800 --> 00:16:59,560
struggle with that kind of 
relation. 

320
00:16:59,560 --> 00:17:01,240
And therefore, you know, 
sometimes there is a bit of 

321
00:17:01,240 --> 00:17:03,680
tension there. 
But yeah, overall, I think there

322
00:17:03,680 --> 00:17:05,760
is a strong sense of mutual 
respect. 

323
00:17:06,400 --> 00:17:10,280
And of course there is Quarkus, 
which is a challenger to string 

324
00:17:10,280 --> 00:17:12,640
boot. 
That makes things even more 

325
00:17:12,640 --> 00:17:15,400
interesting. 
I was in the initial group 

326
00:17:15,400 --> 00:17:19,359
that's created Quarkus. 
And so actually one of the 

327
00:17:19,359 --> 00:17:24,440
things we were using as a like a
key thing like can this whole 

328
00:17:24,440 --> 00:17:27,880
technology work was like the 
proof was like, can you get 

329
00:17:27,880 --> 00:17:31,560
Hibernate to work in this very 
special way that's Quarkus does?

330
00:17:31,800 --> 00:17:35,480
The idea was like we wanted to 
have Grau VM to support Grau VM 

331
00:17:35,480 --> 00:17:38,000
properly. 
Gravel VM at the time had a lot 

332
00:17:38,000 --> 00:17:40,360
of limitations. 
Many of those have been, you 

333
00:17:40,360 --> 00:17:42,360
know softened or resolved 
nowadays. 

334
00:17:42,360 --> 00:17:45,400
But at the time the list of 
limitations was really daunting.

335
00:17:46,080 --> 00:17:50,200
And among them pretty much in 
this list of limitations 

336
00:17:50,200 --> 00:17:54,960
Hibernate would do all of them. 
So I was tasked we can you try 

337
00:17:54,960 --> 00:17:56,960
to make Hibernate work on Gravel
VM. 

338
00:17:57,320 --> 00:18:01,720
And my mentors, Jason Green and 
Emmanuel, they were very keen 

339
00:18:01,720 --> 00:18:04,200
about you need to make it 
happen. 

340
00:18:04,400 --> 00:18:07,440
It's really important for the 
entire Java world, the entire 

341
00:18:07,440 --> 00:18:10,920
Java ecosystem, and I'll get 
back to that, why we thought 

342
00:18:10,920 --> 00:18:14,680
that was the case. 
So they were saying to me, OK, 

343
00:18:15,040 --> 00:18:18,480
maybe some of the features of 
Hibernate cannot work in native,

344
00:18:18,920 --> 00:18:23,200
remove them like they were 
thinking or suggesting to me 

345
00:18:23,560 --> 00:18:27,960
create something new which would
like have the role of Hibernate 

346
00:18:27,960 --> 00:18:30,880
in this new world but may be 
different. 

347
00:18:31,000 --> 00:18:35,240
And we were like what about like
JPA the spec right and things. 

348
00:18:36,000 --> 00:18:37,920
Now. 
The situation was a bit dire 

349
00:18:37,920 --> 00:18:41,520
like so we do have, we give a 
lot of importance to the spec, 

350
00:18:41,880 --> 00:18:45,160
but at the same time the way 
cloud native development was 

351
00:18:45,160 --> 00:18:49,240
going, it was clear that the way
the direction Java was taking 

352
00:18:49,240 --> 00:18:51,440
was just not compatible with 
this new feature. 

353
00:18:51,680 --> 00:18:55,320
And so there was a bit of a 
strong concern that the Java 

354
00:18:55,320 --> 00:18:57,120
would still be alive in 10 
years. 

355
00:18:57,720 --> 00:19:00,760
And then we were really thinking
that, OK, if the current Java 

356
00:19:00,760 --> 00:19:04,040
enterprise specs are not fit for
the purpose, maybe we should 

357
00:19:04,040 --> 00:19:05,920
propose a new set of 
specifications. 

358
00:19:06,440 --> 00:19:10,760
So my task initially was 
actually like write down what 

359
00:19:10,760 --> 00:19:13,400
you would think should be 
something that we were calling 

360
00:19:13,400 --> 00:19:15,680
like JPL Light. 
That was the idea. 

361
00:19:16,160 --> 00:19:19,560
And you have to identify which 
things that Hibernate is doing 

362
00:19:19,560 --> 00:19:22,920
today we can do in this JPA 
light and which things you need 

363
00:19:22,920 --> 00:19:27,120
to leave behind in interest of 
making things happen in the, in 

364
00:19:27,120 --> 00:19:30,560
the Gallian world. 
So I start working on that. 

365
00:19:30,720 --> 00:19:34,680
And this list is very long and 
the amount of complexities we 

366
00:19:34,680 --> 00:19:38,160
have, it is very daunting. 
You know, I'm thinking I'm 

367
00:19:38,560 --> 00:19:41,720
showering a lot and going back 
and, and at some point I have 

368
00:19:41,720 --> 00:19:44,560
this, you reckon moment, which 
was really like a brilliant, 

369
00:19:44,560 --> 00:19:47,120
like I, I just twist around the 
thing a little bit. 

370
00:19:47,120 --> 00:19:50,360
And then I, I wrote this e-mail 
to my colleagues saying, look, 

371
00:19:50,360 --> 00:19:54,880
if we boot the entire framework 
in this particular way, I have 

372
00:19:54,880 --> 00:19:57,640
no limitation whatsoever. 
Like we, we solve all the 

373
00:19:57,640 --> 00:19:59,360
problems that Grav VM is 
offering. 

374
00:19:59,920 --> 00:20:02,000
And so there is no need for any 
specification, right? 

375
00:20:02,480 --> 00:20:05,160
So that was a very nice 
breakthrough. 

376
00:20:05,960 --> 00:20:09,880
Of course, this was all theory. 
And then, you know, we start 

377
00:20:09,880 --> 00:20:12,320
prototyping those things and 
well, these prototypes are all 

378
00:20:12,320 --> 00:20:13,960
in GitHub. 
And so people can have a look 

379
00:20:13,960 --> 00:20:16,200
now. 
It's pretty much if you check 

380
00:20:16,200 --> 00:20:20,400
out the work with source codes. 
And you sort them by date and 

381
00:20:20,400 --> 00:20:24,160
you go in the very early things,
you'll see some scripts and 

382
00:20:24,160 --> 00:20:27,040
scribbles and really terrible 
code that I wrote at a time, 

383
00:20:27,040 --> 00:20:29,360
which have nothing to do with 
what resist today. 

384
00:20:30,320 --> 00:20:31,840
Well, there were other 
colleagues working on other 

385
00:20:31,840 --> 00:20:35,840
aspects to make a new generation
framework, but I was focusing on

386
00:20:35,840 --> 00:20:38,360
this thing of like, do we need a
new spec? 

387
00:20:38,360 --> 00:20:42,040
Is GPA fit for the future in the
the gravel VM space? 

388
00:20:42,080 --> 00:20:43,920
Right. 
And that was resolved this way, 

389
00:20:43,920 --> 00:20:48,160
but it the way I was resolving 
this was extremely specific for 

390
00:20:48,160 --> 00:20:50,440
Hibernate. 
I mean, this was a good 

391
00:20:50,440 --> 00:20:54,960
breakthrough because if we had 
solved these workarounds for 

392
00:20:54,960 --> 00:20:58,360
Hibernate which had all of these
limitations, then it was 

393
00:20:58,360 --> 00:21:01,600
probably going to be easy to 
apply the same ideas to all the 

394
00:21:01,600 --> 00:21:05,200
other frameworks which have 
simpler use of the JVM strategy.

395
00:21:05,360 --> 00:21:09,360
Maybe for the benefit of some of
us which don't know the details 

396
00:21:09,360 --> 00:21:12,640
in like what are some of the 
biggest limitations that you see

397
00:21:13,280 --> 00:21:16,280
Gravel VM is not able to run 
Hibernate or maybe most of the 

398
00:21:16,600 --> 00:21:19,440
Java frameworks back then. 
What are some of the biggest 

399
00:21:19,440 --> 00:21:24,280
hurdles for you and how did you 
actually solve that by inventing

400
00:21:24,280 --> 00:21:27,160
walkers? 
OK, well, I wasn't alone in 

401
00:21:27,160 --> 00:21:29,600
inventing Quackos, right? 
I was focusing from this aspect.

402
00:21:29,600 --> 00:21:33,120
Yeah, for example, Gravel VM, 
the entire code base needs to be

403
00:21:33,120 --> 00:21:36,000
known at build time. 
That means also like that the 

404
00:21:36,000 --> 00:21:40,880
bytecode is not changing. 
So no bytecode manipulation, no 

405
00:21:40,880 --> 00:21:42,880
generation of bytecode at 
runtime. 

406
00:21:43,240 --> 00:21:46,840
And also like no reflective 
invocations either. 

407
00:21:46,840 --> 00:21:50,720
It needs to do reflective calls 
now since many years already we 

408
00:21:50,720 --> 00:21:54,800
tried to not use reflection on 
runtime because it used to be 

409
00:21:54,800 --> 00:21:58,120
quite inefficient in the JVM. 
It's better optimized nowadays 

410
00:21:58,120 --> 00:22:00,040
in the JVM, but still we try to 
avoid it. 

411
00:22:00,040 --> 00:22:02,400
I mean we already implemented 
the all the schemes to avoid it,

412
00:22:02,400 --> 00:22:05,960
so it's better that way. 
But at least during the 

413
00:22:05,960 --> 00:22:09,520
bootstrap, we need to know your 
entity, which properties they 

414
00:22:09,520 --> 00:22:13,600
have, what's their name, what's 
their type, and which classes 

415
00:22:13,600 --> 00:22:15,840
actually have under certain 
annotations, right? 

416
00:22:16,280 --> 00:22:19,520
So all of that goes pretty much 
via the JDK standard reflection 

417
00:22:19,520 --> 00:22:22,920
API, at least it used to. 
And the reflection doesn't work 

418
00:22:22,920 --> 00:22:27,480
at all in ATV unless you 
specifically tell the compiler, 

419
00:22:27,760 --> 00:22:32,200
hey sorry, there is like an 
additional resource file that 

420
00:22:32,200 --> 00:22:35,440
you can type in in if it's 
Jason. 

421
00:22:35,440 --> 00:22:38,360
Now I forgot I I haven't written
one of these resource files in 

422
00:22:38,360 --> 00:22:41,000
years. 
But you can give a lot of input 

423
00:22:41,000 --> 00:22:44,600
to the diagram compiler to tell 
it oh at runtime. 

424
00:22:44,600 --> 00:22:47,800
This method might need to have 
like a reflective access. 

425
00:22:47,800 --> 00:22:50,120
This type needs to have a 
reflective construction. 

426
00:22:50,160 --> 00:22:52,400
This other type might need to be
serializable. 

427
00:22:52,840 --> 00:22:57,960
You need to be thorough in 
listing all the cases otherwise 

428
00:22:57,960 --> 00:23:00,680
it's going to fail. 
Resource loading wouldn't work 

429
00:23:00,680 --> 00:23:04,800
unless you register IT. 
Service loading doesn't work 

430
00:23:04,800 --> 00:23:07,320
unless you register the type 
that's going to be loaded. 

431
00:23:08,120 --> 00:23:12,800
And well, we do all of these 
things in Hibernate and in many 

432
00:23:12,800 --> 00:23:13,960
other frameworks, right? 
Yeah. 

433
00:23:14,200 --> 00:23:17,800
Now the key was really like the 
Gaussian compiler is a Java 

434
00:23:17,800 --> 00:23:22,160
process and it is triggering 
initialization of the constants 

435
00:23:22,160 --> 00:23:24,880
in your code. 
So what I did was really like, 

436
00:23:25,240 --> 00:23:31,120
oh, it means that if I with my 
main class and I do like public 

437
00:23:31,120 --> 00:23:35,400
static final session factory and
I initialize Hibernate in a 

438
00:23:35,400 --> 00:23:40,520
constant, the LVM compiler is 
going to initialize the entire 

439
00:23:40,520 --> 00:23:43,840
Hibernate in this constant. 
And it did. 

440
00:23:44,600 --> 00:23:46,640
So it's booted entire Hibernate 
in there. 

441
00:23:47,200 --> 00:23:49,280
And now there are some problems 
with that. 

442
00:23:49,640 --> 00:23:52,160
First off, you don't want it to 
actually connect to the database

443
00:23:52,160 --> 00:23:53,680
because you're building the 
application. 

444
00:23:53,680 --> 00:23:56,560
Your database is maybe not even 
reachable from this environment.

445
00:23:56,680 --> 00:23:59,120
Or well, you certainly don't 
want it to connect even if it's 

446
00:23:59,120 --> 00:24:01,000
reachable, right? 
Because you're building. 

447
00:24:02,040 --> 00:24:04,880
So yeah, I started patching 
Hibernate in a bit of a private 

448
00:24:04,880 --> 00:24:07,200
branch, you know, we want to do 
real quick, like what happens if

449
00:24:07,200 --> 00:24:08,760
I delete this stuff and nobody 
cares? 

450
00:24:08,760 --> 00:24:11,640
So lots of patches in there. 
So I just make sure that the 

451
00:24:11,640 --> 00:24:15,320
life cycle of the booting phase 
is pretty much split between two

452
00:24:15,320 --> 00:24:18,280
phases, building the entire 
model, discovering, doing the 

453
00:24:18,280 --> 00:24:21,760
reflection work and all that. 
And then actually, you know, 

454
00:24:21,760 --> 00:24:24,120
connecting to the database and 
doing the fix. 

455
00:24:24,720 --> 00:24:28,320
This was complicated because the
boot strap is very cyclic, very 

456
00:24:28,320 --> 00:24:30,720
unstructured. 
It's, well, it is structured, 

457
00:24:30,720 --> 00:24:34,880
but it's designed in an era in 
which this separation was not an

458
00:24:34,880 --> 00:24:38,560
objective at all. 
Now the trick here is that all 

459
00:24:38,560 --> 00:24:42,360
of these reflection and all of 
these work in annotation, 

460
00:24:42,360 --> 00:24:44,720
scanning and configuration 
parsing and all of it. 

461
00:24:45,240 --> 00:24:48,760
It's happening when the compiler
is running. 

462
00:24:48,760 --> 00:24:50,800
Now the compiler happens to be a
valid JVM. 

463
00:24:51,040 --> 00:24:54,840
Grove VM is written in Java. 
So this processing which is 

464
00:24:54,840 --> 00:24:57,920
running and defining the 
constants, all these operations 

465
00:24:57,920 --> 00:25:01,720
that are not valid after being 
compiled are valid during the 

466
00:25:01,720 --> 00:25:05,200
compilation. 
So all of these limitations, 

467
00:25:05,200 --> 00:25:08,400
suddenly we're not applying. 
I just needed to make sure that 

468
00:25:08,400 --> 00:25:11,400
we would not use any of those 
things at runtime. 

469
00:25:12,240 --> 00:25:15,040
Of course we would still use 
some of those things at runtime,

470
00:25:15,080 --> 00:25:19,000
but it's really reduced the set 
to something that was manageable

471
00:25:19,200 --> 00:25:22,400
short time. 
For example, Hibernate, if you 

472
00:25:22,400 --> 00:25:25,920
use bytecode enhancement on 
entities, it will not need a 

473
00:25:25,920 --> 00:25:28,880
reflective call on objects 
except the constructor, I 

474
00:25:28,880 --> 00:25:30,240
believe. 
But still, I guess. 

475
00:25:30,840 --> 00:25:33,240
But if you do the bytecode, you 
know, if you don't do bytecode 

476
00:25:33,240 --> 00:25:35,240
enhancement, then a lot of 
reflection is happening. 

477
00:25:35,240 --> 00:25:37,720
So, you know, very quickly we 
decided, well, bytecode 

478
00:25:37,720 --> 00:25:40,800
enhancement is mandatory. 
We don't even ask people to use 

479
00:25:40,800 --> 00:25:41,800
it. 
It's just something the 

480
00:25:41,800 --> 00:25:43,800
framework does for you during 
the build. 

481
00:25:44,320 --> 00:25:48,320
So it's it's simpler and it's 
also simpler for us because one 

482
00:25:48,320 --> 00:25:51,720
problem Hibernate had over the 
years is lots of configuration 

483
00:25:51,720 --> 00:25:56,480
properties, lots of even in the 
engine possibilities like do we 

484
00:25:56,480 --> 00:25:58,440
need to handle the entity as a 
manager? 

485
00:25:58,440 --> 00:26:01,640
Do we need to handle, Has it 
been enhanced with which 

486
00:26:01,640 --> 00:26:03,600
capabilities? 
And so for us, even like 

487
00:26:03,600 --> 00:26:06,040
reducing the things that we 
actually need to support also 

488
00:26:06,040 --> 00:26:08,280
helps us to increase the quality
of the. 

489
00:26:08,280 --> 00:26:13,560
Current, right, I think 1 aspect
about Java back then, right? 

490
00:26:14,000 --> 00:26:17,240
It used to be very people 
associated as a heavyweight, you

491
00:26:17,240 --> 00:26:18,760
know, whenever you run Java 
applications. 

492
00:26:18,760 --> 00:26:22,680
Plus, yeah, when you boot it 
takes a while, maybe seconds and

493
00:26:22,680 --> 00:26:25,120
it depends on your project. 
If it gets bigger then it might 

494
00:26:25,120 --> 00:26:27,640
take even up to a minute I would
say. 

495
00:26:28,200 --> 00:26:31,600
Now with all these inventions 
like Quarkus and maybe Grau VM 

496
00:26:31,600 --> 00:26:36,040
itself and maybe other projects 
that I'm not aware of, has Java 

497
00:26:36,040 --> 00:26:39,240
become a valid choice for like 
cloud native application? 

498
00:26:39,240 --> 00:26:41,880
Think of it like a function as a
service, you know where you need

499
00:26:41,880 --> 00:26:44,920
to boot up really fast and react
to certain events. 

500
00:26:45,440 --> 00:26:48,800
Has it reached that stage yet? 
I think it did, yes. 

501
00:26:48,800 --> 00:26:50,600
It's absolutely in that 
category. 

502
00:26:50,680 --> 00:26:53,720
Like we do have a Quark Goes 
version for serverless. 

503
00:26:54,240 --> 00:26:58,960
It starts in milliseconds, so 
people can really decide if they

504
00:26:58,960 --> 00:27:02,760
want to go into that direction. 
Actually, the beauty of it is 

505
00:27:02,760 --> 00:27:05,320
that you don't have to decide in
which direction you're going 

506
00:27:05,320 --> 00:27:07,280
upfront. 
You're not going to choose a 

507
00:27:07,280 --> 00:27:09,280
framework because you're going 
serverless. 

508
00:27:09,720 --> 00:27:12,680
You're building your code and 
then you can deploy the same 

509
00:27:12,680 --> 00:27:16,160
application easily. 
You can change it to in ordering

510
00:27:16,160 --> 00:27:18,200
the in the build property 
saying, well, I want to build 

511
00:27:18,200 --> 00:27:20,000
this as a serverless function, 
right? 

512
00:27:20,000 --> 00:27:23,440
And then maybe you realize, you 
know with the the load on this 

513
00:27:23,440 --> 00:27:26,080
serverless thing is getting 
higher and higher. 

514
00:27:26,080 --> 00:27:29,000
You're better off if this was 
like a regular Java application.

515
00:27:29,440 --> 00:27:31,840
It's just a matter of changing 
the configuration property of 

516
00:27:31,880 --> 00:27:34,600
the system. 
Or maybe you want, you know, you

517
00:27:34,600 --> 00:27:39,000
are getting like very low load 
occasionally, but it's more 

518
00:27:39,000 --> 00:27:41,240
convenient for you to run it as 
a native image and you just 

519
00:27:41,240 --> 00:27:43,280
can't compile the same 
application to native. 

520
00:27:43,480 --> 00:27:46,160
What I really like is this 
flexibility that you don't have 

521
00:27:46,160 --> 00:27:49,240
to decide upfront, like you're 
not going to use Quarkus because

522
00:27:49,240 --> 00:27:51,040
you need native. 
You're going to use Quarkus 

523
00:27:51,040 --> 00:27:52,720
because you want to write in 
Java. 

524
00:27:53,320 --> 00:27:57,120
And what's coming after that, 
well, depends on the needs of 

525
00:27:57,120 --> 00:27:58,720
the day. 
And you know, requirements 

526
00:27:58,720 --> 00:28:01,360
change often and agility is 
quite important nowadays. 

527
00:28:01,720 --> 00:28:04,400
Helps to keep the cost low to 
adapt really quickly. 

528
00:28:04,840 --> 00:28:07,320
Right. 
I mean, Quacus itself solves 

529
00:28:07,600 --> 00:28:10,280
almost kind of like similar 
problem to Spring Boot, right? 

530
00:28:10,280 --> 00:28:13,000
Like it helps people to 
bootstrap like create new 

531
00:28:13,040 --> 00:28:15,800
applications faster. 
And there are a lot of, you 

532
00:28:15,800 --> 00:28:18,240
know, niceties, you know, other 
generation and things like that,

533
00:28:18,240 --> 00:28:21,040
I guess. 
So tell us why we should use 

534
00:28:21,040 --> 00:28:22,760
probably Quacus versus Spring 
Boot. 

535
00:28:22,760 --> 00:28:25,640
And I know that for some people 
this is probably common 

536
00:28:25,640 --> 00:28:30,120
question. 
So I think we are at the stage 

537
00:28:30,120 --> 00:28:33,960
in which the majority of German 
workers have experience with 

538
00:28:33,960 --> 00:28:36,960
Spring Boot. 
So one thing that we really took

539
00:28:36,960 --> 00:28:40,520
a lot of care of is to make it 
really easy for somebody that's 

540
00:28:40,600 --> 00:28:42,920
has experience with Spring Boot 
to move to Quarcos. 

541
00:28:43,840 --> 00:28:48,160
There is a book by Eric Tandrea 
about it's called I believe 

542
00:28:48,240 --> 00:28:51,280
Quarcos for Spring developers. 
And the book is free. 

543
00:28:51,280 --> 00:28:53,960
You can just Google it. 
You can download the PDF for 

544
00:28:53,960 --> 00:28:56,480
free like or you can also buy a 
paper copy if you want it sent. 

545
00:28:56,480 --> 00:28:58,680
But essentially you can get the 
PDF for free. 

546
00:28:59,320 --> 00:29:02,400
It is really easy because you 
know, they're built on very 

547
00:29:02,400 --> 00:29:05,520
similar technologies like if you
have say a very large complex 

548
00:29:05,520 --> 00:29:07,600
hybrid model, I mean, they're 
running the same hybrid and 

549
00:29:07,600 --> 00:29:09,600
they're probably running the 
same version of hybrid, right? 

550
00:29:09,600 --> 00:29:12,920
So, right, that's a piece of 
cake right Now there are some AP

551
00:29:12,920 --> 00:29:15,200
is in Spring. 
Say you're using a Spring Data 

552
00:29:15,200 --> 00:29:17,880
JPI, right? 
I don't like it, but that's 

553
00:29:18,240 --> 00:29:20,760
personal, right? 
It's my totally be fitting for 

554
00:29:20,760 --> 00:29:24,080
your project. 
Now we do have a Spring Data JPI

555
00:29:24,080 --> 00:29:26,560
in corpus. 
It's probably not perfect 

556
00:29:26,560 --> 00:29:30,200
because when you're replacing 
implementation from A to B, 

557
00:29:30,200 --> 00:29:32,240
there might be some 
imperfection, but it will 

558
00:29:32,240 --> 00:29:34,800
definitely help people to 
migrate from one to the other. 

559
00:29:35,360 --> 00:29:39,000
And basically they're built on 
the same, similar standards 

560
00:29:39,000 --> 00:29:40,920
like. 
So if you're using like the JPA 

561
00:29:40,920 --> 00:29:45,720
spec or even if you're just 
using JDBC Servlets, JAXA, RES, 

562
00:29:45,720 --> 00:29:49,920
you're using JAXA, you want to, 
you know, use Kafka Connect, 

563
00:29:49,920 --> 00:29:52,160
Elastic Search, it will be all 
be pretty very, very, very 

564
00:29:52,160 --> 00:29:55,160
similar, much pretty much the 
same in many cases, same code. 

565
00:29:56,320 --> 00:29:59,520
So that's very easy. 
Now, why would you use Quarkus? 

566
00:29:59,520 --> 00:30:01,080
So there are lots of very good 
reasons. 

567
00:30:01,800 --> 00:30:04,280
First off is, well, the 
developer Joy is fantastic. 

568
00:30:04,320 --> 00:30:07,880
Developer Joy is for our 
framework of reference, but it 

569
00:30:07,880 --> 00:30:10,200
means several things like that. 
Pretty much. 

570
00:30:10,200 --> 00:30:12,480
We make your productivity very 
high. 

571
00:30:12,600 --> 00:30:15,960
The feedback loop is really 
short and that makes people 

572
00:30:15,960 --> 00:30:18,840
happy. 
Essentially the main feature is 

573
00:30:19,040 --> 00:30:24,200
the life reloading capability. 
We do aim at any change making 

574
00:30:24,200 --> 00:30:27,480
the code when you are in dev 
mode is reflected in your 

575
00:30:27,480 --> 00:30:29,640
running system 100 and 100 
milliseconds. 

576
00:30:30,120 --> 00:30:33,640
That means that you're, you 
change a method, you refresh 

577
00:30:33,640 --> 00:30:36,400
your browser and you immediately
see if you're on the right path.

578
00:30:37,080 --> 00:30:39,840
You made a mistake like I did a 
demo this morning and I forgot 

579
00:30:39,840 --> 00:30:44,800
to change some path if in the 
rest endpoint and you know, then

580
00:30:44,800 --> 00:30:47,520
I had a duplicated path because 
I made my change by copying a 

581
00:30:47,520 --> 00:30:50,160
block and then making a change. 
And then, you know, I refresh 

582
00:30:50,160 --> 00:30:54,120
the browser, I get an error in 
the browser saying me what I had

583
00:30:54,120 --> 00:30:58,120
done wrong. 
OK, so I flip back to focus, 

584
00:30:58,320 --> 00:31:00,480
change the thing, refresh and 
now I'm fine. 

585
00:31:01,800 --> 00:31:06,000
These kind of errors since I get
immediate feedback and I'm still

586
00:31:06,000 --> 00:31:08,120
focused on. 
I just created the method. 

587
00:31:08,280 --> 00:31:12,760
It's creates a much lower 
cognitive load, right? 

588
00:31:12,760 --> 00:31:17,000
So I'm not frustrated because an
error happened because I'm still

589
00:31:17,000 --> 00:31:19,120
in the flow. 
I have not been distracted. 

590
00:31:19,120 --> 00:31:21,240
And then I know I just keep 
going with my things. 

591
00:31:21,240 --> 00:31:24,520
So I'm happy because I'm very 
productive and I'm learning and 

592
00:31:24,520 --> 00:31:26,960
I'm constantly getting feedback 
that I'm on the right path. 

593
00:31:27,600 --> 00:31:29,720
Speaking of feedback on the 
right path, we have something 

594
00:31:29,720 --> 00:31:33,480
called continuous testing. 
So while you're working, you can

595
00:31:33,480 --> 00:31:36,320
have continuous testing running,
which is pretty much like it's 

596
00:31:36,320 --> 00:31:38,640
running the unit tests loop 
really quickly. 

597
00:31:39,400 --> 00:31:43,400
And while you're coding, you 
might see, but now this test is 

598
00:31:43,400 --> 00:31:45,400
red. 
This is immediate, right? 

599
00:31:45,840 --> 00:31:48,160
And there are some interesting 
techniques in there so that it 

600
00:31:48,160 --> 00:31:50,720
actually knows how to prioritize
which test to run, which are 

601
00:31:50,720 --> 00:31:52,440
related to the code you 
modified, right? 

602
00:31:53,120 --> 00:31:56,960
The other thing is dev services.
So if you want to start 

603
00:31:57,040 --> 00:32:00,120
developing say a new 
application, which is like 

604
00:32:00,120 --> 00:32:03,360
Hibernate connected to Postgres 
and maybe elastic searches in 

605
00:32:03,360 --> 00:32:07,440
Hibernate Search and maybe 
finished band as an external 

606
00:32:07,440 --> 00:32:10,080
cache. 
Now you start having many 

607
00:32:10,080 --> 00:32:13,800
external components. 
Now as a developer, it quickly, 

608
00:32:13,800 --> 00:32:17,760
you know, becomes, oh, OK, I'll 
spend my morning installing all 

609
00:32:17,760 --> 00:32:20,560
these systems in quad Cos you 
don't have to install anything 

610
00:32:20,560 --> 00:32:23,880
about your starting. 
It knows, OK, you have the 

611
00:32:23,880 --> 00:32:25,680
Postgres extension, you have 
Hibernate. 

612
00:32:26,080 --> 00:32:27,920
This implies you're going to 
need Postgres. 

613
00:32:28,560 --> 00:32:32,600
So it will behind the scenes, it
will use those containers, fetch

614
00:32:32,920 --> 00:32:36,200
Postgres instance, start a 
Postgres instance behind the 

615
00:32:36,200 --> 00:32:38,640
scenes for you. 
And you don't even have to 

616
00:32:38,680 --> 00:32:41,400
provide the connection 
properties because those are 

617
00:32:41,400 --> 00:32:44,080
being provided and injected into
the running dev mode. 

618
00:32:44,520 --> 00:32:48,960
So you can quickly start working
on your model and immediately 

619
00:32:48,960 --> 00:32:50,840
get refresh. 
You know, you just refresh the 

620
00:32:50,840 --> 00:32:53,960
application and see the schema 
evolving as you're evolving the 

621
00:32:53,960 --> 00:32:55,120
model. 
Or you know, in the other 

622
00:32:55,120 --> 00:32:57,000
direction with depending what's 
your cup of tea. 

623
00:32:57,440 --> 00:33:01,600
But the flow goes really fast 
and you you're not wasting time.

624
00:33:02,280 --> 00:33:05,640
Boring things, weren't it? 
I, I really believe that the 

625
00:33:05,920 --> 00:33:08,920
feedback loop, right, the 
shorter you can make it right? 

626
00:33:08,920 --> 00:33:11,520
And the developer joy, right? 
I still remember back then when 

627
00:33:11,520 --> 00:33:15,440
I did Java, right, whenever 
there's a class signature that I

628
00:33:15,440 --> 00:33:18,920
need to change, it was like, oh 
man, I have to restart my 

629
00:33:18,920 --> 00:33:20,640
applications, wait for the 
booster. 

630
00:33:21,440 --> 00:33:24,240
And back then, when there was AJ
Rebel, maybe you have heard 

631
00:33:24,240 --> 00:33:27,200
about it, that was also quite 
revolutionary, although it was 

632
00:33:27,200 --> 00:33:29,280
quite pricey back then for some 
of us, right? 

633
00:33:29,760 --> 00:33:32,040
But yeah, this thing that you 
mentioned, even though I haven't

634
00:33:32,040 --> 00:33:34,920
used Quarkus, I really believe 
that it can make life really 

635
00:33:34,920 --> 00:33:37,040
simpler and more productive for 
developers. 

636
00:33:37,240 --> 00:33:41,480
Yeah, yeah, we, I remember at 
the time, yeah, Jerebel was very

637
00:33:41,480 --> 00:33:44,640
interesting, but I think they 
had a big maintenance problem 

638
00:33:44,640 --> 00:33:48,680
because they had to know how 
each framework is going to 

639
00:33:48,680 --> 00:33:50,560
react. 
I needed to know how to, I 

640
00:33:50,560 --> 00:33:51,840
remember the conversation with 
them. 

641
00:33:51,840 --> 00:33:54,400
I was already known in the 
Hibernate community. 

642
00:33:54,400 --> 00:33:57,200
They wanted us to have some kind
of stable API that we would 

643
00:33:57,200 --> 00:33:59,680
promise to never change over 
time so that they would know 

644
00:33:59,680 --> 00:34:03,080
where to hook. 
It was very useful, but it was 

645
00:34:03,080 --> 00:34:05,440
also extremely costly. 
You know, you know, Quark was 

646
00:34:05,440 --> 00:34:08,360
really takes a very innovative 
idea there, which is like since 

647
00:34:08,360 --> 00:34:11,679
it's so fast to boot, just 
reboot entire application over 

648
00:34:11,679 --> 00:34:14,639
time and it's very reassuring. 
It means you really have a clean

649
00:34:14,639 --> 00:34:16,239
slate and this is really the 
output. 

650
00:34:16,239 --> 00:34:18,960
It's not, you know, it's 
something fancy because maybe 

651
00:34:18,960 --> 00:34:21,280
some of your tools is something 
strange. 

652
00:34:21,280 --> 00:34:22,800
But the state might be gone 
right if. 

653
00:34:22,840 --> 00:34:26,600
You the state is gone, but that 
encourages you to also work on 

654
00:34:26,600 --> 00:34:29,040
your import scripts and your 
setup scripts in the in the 

655
00:34:29,040 --> 00:34:31,159
right way, right? 
So you're constantly also 

656
00:34:31,159 --> 00:34:32,719
checking that those things are 
In Sync. 

657
00:34:33,040 --> 00:34:35,239
It actually leads you into the 
right touch. 

658
00:34:36,520 --> 00:34:40,199
So all along in your so-called 
career, right, maybe you dealt 

659
00:34:40,199 --> 00:34:44,280
mainly with Java technologies. 
I know like for some, I don't 

660
00:34:44,280 --> 00:34:46,679
know, youngsters, right, People 
who just came into software 

661
00:34:46,679 --> 00:34:49,400
engineering, maybe in the last 
10 years or so, Java is 

662
00:34:49,400 --> 00:34:53,639
associated with like, oh, legacy
heavyweight and now also like 

663
00:34:53,639 --> 00:34:57,120
the version changes so fast. 
So how do you compare, maybe 

664
00:34:57,120 --> 00:34:59,720
from your point of view, maybe a
little bit biased, but how do 

665
00:34:59,720 --> 00:35:02,840
you compare Java now with like 
modern technology, like 

666
00:35:02,840 --> 00:35:05,440
programming languages, like 
maybe Rascal and even 

667
00:35:05,440 --> 00:35:08,640
TypeScript, right, Python. 
What are still some of the 

668
00:35:08,640 --> 00:35:10,880
strengths that Java has that 
people should consider? 

669
00:35:10,880 --> 00:35:12,840
Even though they're like 
youngsters, They want modern 

670
00:35:12,840 --> 00:35:15,680
technologies, Yeah. 
I honestly think Java is in a 

671
00:35:15,680 --> 00:35:18,640
very very good position. 
People maybe don't realize it 

672
00:35:18,640 --> 00:35:20,000
right? 
Because you know, depends who 

673
00:35:20,000 --> 00:35:21,880
you listen and what you get 
excited about. 

674
00:35:21,880 --> 00:35:24,880
But if you look at, you know, 
each of the languages you 

675
00:35:24,880 --> 00:35:29,960
mentioned, they all have like 1 
strong suit and very weak in 

676
00:35:29,960 --> 00:35:34,320
other areas. 
While Java is maybe not top 

677
00:35:34,320 --> 00:35:38,080
leader in all of those areas, 
but it's very close to be 

678
00:35:38,080 --> 00:35:41,560
leading in all of those areas. 
It has been innovating quite 

679
00:35:41,560 --> 00:35:44,760
aggressively recently. 
Like I think the Oracle Stewarts

680
00:35:44,760 --> 00:35:47,680
and including like the Reddit 
engineers also contributed some 

681
00:35:48,120 --> 00:35:52,360
the improvements there are are 
studying up the pace accelerated

682
00:35:52,480 --> 00:35:54,280
and it's very interesting where 
it's headed. 

683
00:35:54,680 --> 00:35:56,640
Like now we're working on a 
project Leiden. 

684
00:35:56,960 --> 00:35:59,120
There are lots of interesting 
things happening in the open 

685
00:35:59,120 --> 00:36:02,720
GDK, but personally very 
interested in Project Leiden 

686
00:36:03,040 --> 00:36:05,880
because of the things that we do
with Quark Quiz and how we also 

687
00:36:05,880 --> 00:36:08,400
integrate with it, right. 
So project Leiden is going to, 

688
00:36:08,400 --> 00:36:12,000
you know, they kind of realize 
from pressure and low VM 

689
00:36:12,560 --> 00:36:17,200
interesting people that it boots
faster that the open JDK had the

690
00:36:17,200 --> 00:36:20,760
problem in booting too slowly 
and they're addressing that. 

691
00:36:20,920 --> 00:36:23,160
It's improving very 
significantly with Leiden. 

692
00:36:23,400 --> 00:36:26,640
And so that's very interesting. 
Project Lily put is making it 

693
00:36:26,640 --> 00:36:29,600
consume less memory because it 
had this fame of being bloated 

694
00:36:29,600 --> 00:36:31,720
and all that. 
Honestly, the fame of being 

695
00:36:31,720 --> 00:36:35,280
bloated is very often coming 
from the frameworks that were 

696
00:36:35,280 --> 00:36:39,200
pretty much not designed to do 
things to boot fast because 

697
00:36:39,200 --> 00:36:41,760
nobody cared. 
The application was going to be 

698
00:36:41,760 --> 00:36:45,400
up for many, many months, and if
it was taking some seconds more 

699
00:36:45,400 --> 00:36:47,840
when it would booting that was 
like a drop in the bucket and 

700
00:36:47,880 --> 00:36:50,520
completely meaningless. 
So these things are being 

701
00:36:50,520 --> 00:36:53,040
addressed now because people 
start to pay attention to them. 

702
00:36:53,040 --> 00:36:56,080
Now, of course, these these 
libraries, they're so widely 

703
00:36:56,080 --> 00:37:01,680
used and they're so large and 
feature full that it takes some 

704
00:37:01,680 --> 00:37:04,640
time to get there right. 
But we are getting there really 

705
00:37:04,640 --> 00:37:05,880
quickly. 
If you look into the Quark 

706
00:37:05,920 --> 00:37:09,640
space, like a very big complex 
Quarkus application with 

707
00:37:10,080 --> 00:37:13,120
thousand hybrid of entities can 
boot it under one second. 

708
00:37:13,400 --> 00:37:17,200
Wow, that's that's yeah, that's 
I'm very, very happy with that. 

709
00:37:17,200 --> 00:37:20,800
But we keep working on it. 
I have more ambitious targets 

710
00:37:20,800 --> 00:37:24,040
like we want to go in there like
203 hundred milliseconds of 

711
00:37:24,040 --> 00:37:26,680
space. 
And yeah, about other the other 

712
00:37:26,680 --> 00:37:28,960
languages. 
Well, Rust is really very 

713
00:37:28,960 --> 00:37:32,040
interesting, but more for the 
properties that it has, right? 

714
00:37:32,440 --> 00:37:35,760
We do believe that in terms of 
like achieving maximum 

715
00:37:35,760 --> 00:37:38,480
performance or maximum 
efficiency of the system, like 

716
00:37:38,480 --> 00:37:42,200
if you really want to handle a 
very, very high load, Java is 

717
00:37:42,200 --> 00:37:44,000
the way to go. 
It's came really. 

718
00:37:44,520 --> 00:37:48,400
There are so many clever things 
happening in the JVM in Grove 

719
00:37:48,400 --> 00:37:50,600
VM. 
The combination of these things,

720
00:37:50,600 --> 00:37:55,120
the combination with quarkless 
things that we're exploring are 

721
00:37:55,120 --> 00:37:57,320
really pushing the throughputs 
to very, very high levels. 

722
00:37:57,400 --> 00:38:02,680
And we do compete and we do 
benchmark ourselves also with 

723
00:38:02,680 --> 00:38:08,400
benchmarks in other languages, 
because work is significantly 

724
00:38:08,400 --> 00:38:10,840
faster than any other Java 
framework around there. 

725
00:38:11,440 --> 00:38:16,200
So it's not fun. 
The challenge really is like, is

726
00:38:16,200 --> 00:38:19,920
this design perfect? 
Like can this go any faster 

727
00:38:20,680 --> 00:38:23,400
today? 
To verify that I need to compare

728
00:38:23,400 --> 00:38:28,440
myself with other languages 
including like Rust, assembly, C

729
00:38:29,080 --> 00:38:30,680
We're getting really close to 
that level. 

730
00:38:31,640 --> 00:38:35,720
How about Kotlin? 
I mean is it like the default 

731
00:38:35,720 --> 00:38:37,920
language use or people still 
write in Java? 

732
00:38:38,880 --> 00:38:43,200
I see a lot of interest in 
Kotlin, but again, it depends on

733
00:38:43,200 --> 00:38:47,960
which area you're looking. 
I have not intentionally avoid 

734
00:38:47,960 --> 00:38:50,720
Kotlin. 
I tried to learn it but I never 

735
00:38:50,720 --> 00:38:53,840
had any actual need. 
I I'm not a Kotlin professional 

736
00:38:53,840 --> 00:38:56,840
at all. 
Everything I do is in Java and I

737
00:38:56,840 --> 00:39:00,920
don't feel the need for Kotlin. 
I don't know, time might tell, 

738
00:39:00,920 --> 00:39:05,560
but the impression really is 
that Kotlin and Ceylon, they 

739
00:39:05,560 --> 00:39:10,360
have been pushing the JVM to 
innovate, but many of the most 

740
00:39:10,360 --> 00:39:13,160
important things, they are now 
available in the JVM or they are

741
00:39:13,160 --> 00:39:14,800
coming very soon in the JVM, 
right. 

742
00:39:15,160 --> 00:39:18,960
So this is kind of removing the 
need for people to go and earn 

743
00:39:19,080 --> 00:39:25,120
Scala cutling things, yeah. 
So let's maybe go back to the 

744
00:39:25,600 --> 00:39:28,640
Hibernate side, right? 
So ORM technologies, I mean, 

745
00:39:28,720 --> 00:39:31,480
many programming languages now 
support some kind of ORM 

746
00:39:31,480 --> 00:39:34,160
libraries. 
Some people like it because 

747
00:39:34,160 --> 00:39:37,440
maybe they can write some, you 
know, database related 

748
00:39:37,440 --> 00:39:39,920
applications fast. 
Some people really hate it. 

749
00:39:40,600 --> 00:39:43,960
So from someone who is like a 
common dinner of Hibernate, what

750
00:39:43,960 --> 00:39:47,640
is your opinion? 
Yeah, we we had to have a thick 

751
00:39:47,640 --> 00:39:50,840
skin because yeah, there, there 
are lots of Hibernate haters, 

752
00:39:51,000 --> 00:39:54,280
right. 
And there are two categories I 

753
00:39:54,280 --> 00:39:59,040
think of Hibernate haters. 
Generally there is a large group

754
00:39:59,040 --> 00:40:05,560
of people that sadly have been 
both Hibernate the wrong way and

755
00:40:05,800 --> 00:40:10,680
I am trying to address that. 
It's difficult because knowledge

756
00:40:10,680 --> 00:40:15,720
propagates online without 
getting, you know, I'd have no 

757
00:40:15,720 --> 00:40:19,240
control of those things, right? 
We, we might have some authority

758
00:40:19,240 --> 00:40:23,160
say, hey, I work on Hibernate, 
but still, if somebody publishes

759
00:40:23,160 --> 00:40:28,520
a book and it's completely 
wrong, I, I can't go to the 

760
00:40:28,600 --> 00:40:31,200
editor and say, you have to 
withdraw this from the market, 

761
00:40:31,240 --> 00:40:33,760
right? 
And somebody purchased a blog, I

762
00:40:33,760 --> 00:40:36,800
can't go to Google and say, you 
need to delist this because I 

763
00:40:36,800 --> 00:40:38,440
don't agree with its content, 
right? 

764
00:40:38,720 --> 00:40:41,320
That's not how it works. 
And then of course, there is a 

765
00:40:41,320 --> 00:40:45,320
category of people that they 
have been imposed that you use, 

766
00:40:45,360 --> 00:40:48,800
you have to use Hibernate for 
these projects when it made no 

767
00:40:48,800 --> 00:40:51,320
sense, right? 
This is something that we also 

768
00:40:51,320 --> 00:40:53,800
fight for. 
Hibernate is not something that 

769
00:40:53,800 --> 00:40:55,360
should be used in every 
situation. 

770
00:40:55,360 --> 00:40:59,240
There are some situations in 
which is really under the right 

771
00:40:59,240 --> 00:41:04,120
tool, but still it gets imposed 
as a standard by in some places,

772
00:41:04,120 --> 00:41:05,920
right? 
And of course, if you are a 

773
00:41:05,920 --> 00:41:08,040
smart developer and you 
understand that this is being 

774
00:41:08,040 --> 00:41:10,840
imposed to you and it is the 
wrong tool, you know you're not 

775
00:41:10,840 --> 00:41:12,320
going to have a good relation 
with the tool. 

776
00:41:13,640 --> 00:41:16,160
When do you think it's not the 
right time to use like ORM or 

777
00:41:16,160 --> 00:41:19,160
Hibernate? 
Well, I might be biased. 

778
00:41:21,040 --> 00:41:23,960
I would always start from an 
ORAM, or at least in most cases.

779
00:41:24,320 --> 00:41:27,120
Of course, if you need to do a 
lot of operations inside a 

780
00:41:27,120 --> 00:41:31,640
database, maybe store procedures
frowned upon, but in some cases 

781
00:41:31,640 --> 00:41:35,880
they are the right. 
I would always try to minimize 

782
00:41:35,880 --> 00:41:40,240
the the span of transactions. 
So if that implies that the 

783
00:41:40,240 --> 00:41:43,080
transaction gets extremely 
chatty over a wire that's a 

784
00:41:43,080 --> 00:41:45,480
problem, then it's not a good 
solution. 

785
00:41:46,120 --> 00:41:48,880
But in most cases, I would have 
in my system, I would have 

786
00:41:48,880 --> 00:41:51,440
Hibernate available. 
And then, you know, there are 

787
00:41:51,440 --> 00:41:54,640
many operations, many business 
operations, and some of them 

788
00:41:54,640 --> 00:41:57,400
would use Hibernate, some of 
them would not use Hibernate. 

789
00:41:57,600 --> 00:42:01,680
But it's important that people 
remember that Hibernate is an 

790
00:42:01,680 --> 00:42:06,160
ORAM, but it's also facilitating
access to native SQL queries in 

791
00:42:06,160 --> 00:42:09,080
many ways and mapping results of
native SQL queries. 

792
00:42:09,720 --> 00:42:13,240
One thing that was done 
recently, Hibernate had since a 

793
00:42:13,240 --> 00:42:16,640
very long time that had the 
stateless session, which is 

794
00:42:16,640 --> 00:42:18,520
important for some of these 
access patterns. 

795
00:42:18,520 --> 00:42:22,040
And well, recently the state of 
the session got to learn some 

796
00:42:22,040 --> 00:42:25,280
more love like some some more 
improvements in that area and 

797
00:42:25,600 --> 00:42:27,600
the documentation was improved a
lot as well. 

798
00:42:28,240 --> 00:42:32,640
So a good user should understand
when to use hybrid with the 

799
00:42:32,640 --> 00:42:35,960
stateful session, hybrid with 
the stateless session, or when 

800
00:42:35,960 --> 00:42:38,440
to just send these settings to 
the database. 

801
00:42:39,120 --> 00:42:41,760
I guess this also comes back to 
the design, right? 

802
00:42:41,760 --> 00:42:44,840
The design of your application, 
because it can be misused in a 

803
00:42:44,920 --> 00:42:47,880
way such that your entity class 
is used all over the places, 

804
00:42:47,880 --> 00:42:50,240
right? 
Maybe from the entry points of 

805
00:42:50,240 --> 00:42:53,440
the APIs you deal with the 
entity class straight away, 

806
00:42:53,440 --> 00:42:55,920
right? 
You propagate all this, you 

807
00:42:55,920 --> 00:42:59,360
know, so-called object chain all
over the places and somehow 

808
00:42:59,360 --> 00:43:02,280
magically the transaction works.
I guess that's when people 

809
00:43:02,280 --> 00:43:05,400
actually kind of like hate this 
ORM and especially if you have 

810
00:43:05,400 --> 00:43:07,600
like the n + 1 problem, those 
kind of stuff, right? 

811
00:43:08,080 --> 00:43:11,600
It tends to be very slow. 
I guess the design is important,

812
00:43:11,600 --> 00:43:14,200
right? 
So you encapsulate the entity 

813
00:43:14,200 --> 00:43:16,800
for the right reason and don't 
propagate it all over the 

814
00:43:16,800 --> 00:43:20,600
places, don't expose attributes 
that you're not supposed to to 

815
00:43:20,640 --> 00:43:23,240
other parts of the, you know, 
other modules, I guess. 

816
00:43:23,720 --> 00:43:26,200
So maybe in your point of view, 
what kind of design pattern 

817
00:43:26,200 --> 00:43:28,160
maybe that people should think 
about? 

818
00:43:28,160 --> 00:43:31,240
Is it like the main driven 
design or is it like something 

819
00:43:31,240 --> 00:43:34,840
like the hexagonal pattern? 
Is there anything that you think

820
00:43:35,040 --> 00:43:37,760
from your experience as well? 
Those patterns, they're all 

821
00:43:37,760 --> 00:43:41,120
fine, right? 
It's more like how people think 

822
00:43:41,320 --> 00:43:44,200
that the operation will work in 
a database that is important. 

823
00:43:44,640 --> 00:43:49,880
And then then there are lots of 
like Lord people give each other

824
00:43:50,080 --> 00:43:53,600
which are actually unfounded, 
just a very simple one. 

825
00:43:53,600 --> 00:43:56,200
A lot of people still believe 
that an Hibernate entity needs 

826
00:43:56,200 --> 00:43:58,760
to implement Serializable. 
It's just not true. 

827
00:43:59,280 --> 00:44:01,680
It might need Serializable 
because you're using that same 

828
00:44:01,680 --> 00:44:04,680
object with other frameworks 
which require it, but Hibernate 

829
00:44:04,680 --> 00:44:06,160
doesn't care at all if it's 
serializable. 

830
00:44:06,160 --> 00:44:08,360
We never need that. 
And then, you know, they are 

831
00:44:08,360 --> 00:44:11,000
serializable and then they add 
the serial, your ID and you 

832
00:44:11,000 --> 00:44:12,640
know, they're adding lots of 
things in there, which I'm 

833
00:44:12,640 --> 00:44:16,320
thinking, well, fine, you can 
add it, but you're just, you 

834
00:44:16,320 --> 00:44:17,920
know, making your code less 
readable. 

835
00:44:18,480 --> 00:44:21,080
And then, you know, there are 
discussions, getters and sectors

836
00:44:21,080 --> 00:44:22,600
rather than a field. 
Make it public. 

837
00:44:23,160 --> 00:44:27,480
You can do whatever is good for 
design your application. 

838
00:44:27,480 --> 00:44:29,960
I mean, it doesn't care. 
It can be a public field for all

839
00:44:29,960 --> 00:44:31,400
we want. 
It can be a private field. 

840
00:44:31,400 --> 00:44:33,640
It doesn't matter. 
We'll we'll get access to it in 

841
00:44:33,640 --> 00:44:36,800
some way, right? 
And it doesn't really make any 

842
00:44:36,800 --> 00:44:38,920
change in the semantics of of 
what we do. 

843
00:44:39,280 --> 00:44:42,320
It's all the same. 
The equals and hashcode is a 

844
00:44:42,320 --> 00:44:46,960
very tricky one because people 
seem to think they have to 

845
00:44:46,960 --> 00:44:48,960
implement equals and hashcode on
the entities. 

846
00:44:49,720 --> 00:44:54,080
In practice they don't. 
But if you implement it, there 

847
00:44:54,080 --> 00:44:55,840
is a very good chance you're 
getting it wrong. 

848
00:44:56,720 --> 00:44:59,560
So I would typically suggest 
that implement it please. 

849
00:45:01,760 --> 00:45:03,480
And why do I say you're getting 
it wrong? 

850
00:45:03,960 --> 00:45:08,000
Because it's an entity. 
Purpose of the entity is that 

851
00:45:08,000 --> 00:45:11,040
you change its state to 
represent changes that you want 

852
00:45:11,040 --> 00:45:14,880
to happen in the database. 
It means that you're changing 

853
00:45:14,920 --> 00:45:16,800
the state like you're going to 
change the hash code. 

854
00:45:17,040 --> 00:45:20,680
Now, the only reason for you to 
implement equals in hash code is

855
00:45:20,680 --> 00:45:23,800
because you want to store this, 
say, in a hash set somewhere. 

856
00:45:24,120 --> 00:45:26,320
Again, Hibernate doesn't care 
about this, won't it? 

857
00:45:26,320 --> 00:45:28,880
If you implement it or not, it's
totally fine. 

858
00:45:29,480 --> 00:45:31,920
But you might want to implement 
something in your entity because

859
00:45:31,920 --> 00:45:33,360
you need it for some other 
reason. 

860
00:45:33,360 --> 00:45:35,400
Like you want to store this in a
hash set. 

861
00:45:35,800 --> 00:45:38,920
But if you store things with 
multiple attributes in a hash 

862
00:45:38,920 --> 00:45:42,920
set, you're calling for trouble 
because that's how Java 

863
00:45:42,920 --> 00:45:44,960
collections work. 
So it's a bad idea for Java 

864
00:45:44,960 --> 00:45:47,320
collections. 
The only thing that's typically 

865
00:45:47,320 --> 00:45:49,440
stable in an entity is the 
primary key. 

866
00:45:50,080 --> 00:45:52,520
And I'm saying typically because
if you just created the object 

867
00:45:52,520 --> 00:45:54,800
and you didn't store it yet, the
primary key is not assigned 

868
00:45:55,040 --> 00:45:59,960
unless you assign them yourself.
So one correct way in my 

869
00:45:59,960 --> 00:46:04,200
opinion, because of course might
vary, but in my opinion, 1 

870
00:46:04,200 --> 00:46:07,640
correct way of implementing 
equals and hash code is to only 

871
00:46:07,640 --> 00:46:11,480
include ID, the primary key in 
your implementation. 

872
00:46:11,880 --> 00:46:15,400
But also to make sure that 
before you ever invoke those, 

873
00:46:15,400 --> 00:46:17,680
the ID gets assigned right, 
either by you or by the 

874
00:46:17,680 --> 00:46:20,920
framework. 
And then you start having these 

875
00:46:20,920 --> 00:46:24,400
kind of responsibilities and you
know, if you just leave the 

876
00:46:24,400 --> 00:46:29,280
default, it's going to work. 
Now that you mentioned it, I 

877
00:46:29,400 --> 00:46:31,160
could still remember back then, 
right? 

878
00:46:31,200 --> 00:46:34,160
Equals hash code, we use ID auto
generation, most of that. 

879
00:46:34,160 --> 00:46:37,320
I haven't choose the important 
properties or attributes. 

880
00:46:37,320 --> 00:46:40,320
Everything would be, you know, 
important for the entity class. 

881
00:46:40,880 --> 00:46:44,600
So going back to the open source
world, right, You mentioned you 

882
00:46:44,600 --> 00:46:48,440
work in open source, but also 
get contracts like employed as 

883
00:46:48,440 --> 00:46:51,320
in like you contribute to open 
source for some people, like for

884
00:46:51,320 --> 00:46:54,520
me, I haven't done it before. 
How does it like to work in an 

885
00:46:54,520 --> 00:46:56,880
open source? 
But it's kind of like paid. 

886
00:46:57,280 --> 00:46:58,960
To do that. 
So at the time, you mean? 

887
00:46:59,160 --> 00:47:00,760
Yeah, before I was employed by 
Red. 

888
00:47:00,760 --> 00:47:04,400
Yeah, yeah, Yeah, that was, that
was very interesting. 

889
00:47:04,840 --> 00:47:08,160
Of course, good money, but also 
you spend some time in the 

890
00:47:08,160 --> 00:47:11,600
commercial aspect, things which 
I hated, but I would forget to 

891
00:47:11,600 --> 00:47:13,960
send invoices and then just 
thought I'd care about it and 

892
00:47:13,960 --> 00:47:16,760
then I would have no money. 
But you know, if you do it 

893
00:47:16,760 --> 00:47:19,440
properly and you are disciplined
with the commercial part, I 

894
00:47:19,440 --> 00:47:21,280
think that would be a very good 
career, right. 

895
00:47:21,840 --> 00:47:25,640
But you need a network, right. 
You need to be somebody that's 

896
00:47:25,680 --> 00:47:29,840
actually an expert, right? 
So to be an actual expert, you 

897
00:47:29,840 --> 00:47:31,800
need to spend time contributing 
those things. 

898
00:47:32,200 --> 00:47:35,000
So I think a model that would 
work really well for an open 

899
00:47:35,000 --> 00:47:40,840
source contractor is somebody 
that charges a premium because 

900
00:47:40,960 --> 00:47:44,160
so to some important customer, 
because he's actually an expert,

901
00:47:44,680 --> 00:47:48,400
but also because he makes 
changes happen in open source 

902
00:47:48,400 --> 00:47:50,760
project, right? 
So the company might have a 

903
00:47:50,760 --> 00:47:54,640
particular issue, you are able 
to fix it and therefore you can 

904
00:47:54,640 --> 00:47:58,520
charge a premium, but then you 
also actually do fix it and make

905
00:47:58,520 --> 00:48:02,560
sure that it gets merged. 
Now that is a bit tricky because

906
00:48:02,880 --> 00:48:06,760
you know, you might think, well 
this is a solution going to push

907
00:48:06,760 --> 00:48:10,160
it to the project and I'm done 
that you charge, right. 

908
00:48:10,680 --> 00:48:13,840
But there are the other members 
of the team might not agree with

909
00:48:13,840 --> 00:48:17,520
that change. 
So there is that risk. 

910
00:48:17,560 --> 00:48:22,120
It means you nearly need to work
or being pretty good, right? 

911
00:48:22,120 --> 00:48:24,920
Because you need to be 
persuasive to the other people 

912
00:48:25,200 --> 00:48:28,160
and you need to really make sure
that it's a high standard good 

913
00:48:28,160 --> 00:48:30,800
quality work, right? 
So yeah, you might charge a 

914
00:48:30,800 --> 00:48:35,000
premium, but maybe you have been
at a company just two days, but 

915
00:48:35,000 --> 00:48:37,600
you're going to spend 20 days 
making sure that that budget 

916
00:48:37,600 --> 00:48:40,400
gets. 
So please stop balance. 

917
00:48:41,640 --> 00:48:44,320
So at the moment, I mean if 
you're still active in the 

918
00:48:44,400 --> 00:48:46,600
Hibernate, because you are a 
technical lead, right, I assume,

919
00:48:46,760 --> 00:48:48,960
how many contributors are there 
in this project? 

920
00:48:50,280 --> 00:48:55,200
I actually do know now because 
we just changed the license of 

921
00:48:55,280 --> 00:49:01,400
hibernator M, It has been since 
forever LGPL 2.1 with what we 

922
00:49:01,400 --> 00:49:07,160
call crosspot clarification. 
Now in Java, LGPL spare you the 

923
00:49:07,160 --> 00:49:11,080
details, but we decided at some 
point that it was, you know, 

924
00:49:11,080 --> 00:49:13,640
rather than having to have 
clarifications about what was 

925
00:49:13,640 --> 00:49:16,800
interpretation of the license to
reassure people that it's fine, 

926
00:49:16,800 --> 00:49:19,320
it's open source, but it does 
not affect your code. 

927
00:49:19,320 --> 00:49:21,440
That was the concern for some 
companies. 

928
00:49:22,080 --> 00:49:25,120
Of course, not many companies 
because a lot of people use it, 

929
00:49:25,120 --> 00:49:30,640
but we did have some cases in 
which people have this rule. 

930
00:49:30,840 --> 00:49:33,600
You can't use Hibernate or you 
need to use. 

931
00:49:34,200 --> 00:49:37,680
You can use it, but the code 
needs to be compiled purely 

932
00:49:37,680 --> 00:49:41,680
against the JPIAPI is that you 
can't invoke Hibernate code to 

933
00:49:41,680 --> 00:49:45,880
clarify that it's easier to be 
Apache licensed by Apache 

934
00:49:46,040 --> 00:49:49,040
licensed version too. 
So we wanted to change to Apache

935
00:49:49,040 --> 00:49:50,960
license version 2. 
This is actually one of the 

936
00:49:50,960 --> 00:49:54,720
first things I asked my 
colleagues when I joined many, 

937
00:49:54,720 --> 00:49:57,840
many years ago is wouldn't it be
easier if we switched the 

938
00:49:57,840 --> 00:50:00,400
license? 
I remember they laughed at me 

939
00:50:00,400 --> 00:50:03,760
like, Oh yeah, maybe, but it's 
impossible. 

940
00:50:04,280 --> 00:50:07,200
We can't do it and why, why 
can't you do it? 

941
00:50:07,200 --> 00:50:09,040
Well, you need permission for 
contributors. 

942
00:50:09,840 --> 00:50:12,440
So now I really want to change 
the license because of all the 

943
00:50:12,440 --> 00:50:15,720
reasons we can get them later. 
But we had to contact every 

944
00:50:15,720 --> 00:50:18,840
single contributor ever that 
made some meaningful 

945
00:50:18,840 --> 00:50:21,440
contribution to the project. 
Key is meaningful, right? 

946
00:50:21,440 --> 00:50:23,400
Because otherwise we would never
have finished. 

947
00:50:24,080 --> 00:50:27,320
But yeah, we had to go through 
it's like more than 2000 

948
00:50:27,320 --> 00:50:31,440
contributors. 
So we start sending requests to 

949
00:50:31,440 --> 00:50:35,320
the ones that contributed the 
most so that we didn't have to 

950
00:50:35,320 --> 00:50:38,840
review as much code. 
And then there is this long tail

951
00:50:39,000 --> 00:50:43,040
of people that contributed maybe
just one or two patches and 

952
00:50:43,040 --> 00:50:46,720
those who have been looking at 1
by 1 to see is this meaningful 

953
00:50:46,720 --> 00:50:50,120
from a legal link, copyright, 
intellectual property law point 

954
00:50:50,120 --> 00:50:52,520
of view. 
So you discard some of them and 

955
00:50:52,520 --> 00:50:55,640
then you start sending more 
emails and more emails and more 

956
00:50:55,640 --> 00:50:57,800
emails. 
And you know, eventually we got 

957
00:50:57,800 --> 00:51:01,680
permission from everybody. 
So now it's partially licensed 

958
00:51:01,680 --> 00:51:03,440
too. 
But that was that was big. 

959
00:51:03,440 --> 00:51:06,880
It's a very large community. 
That's pretty a lot, right? 

960
00:51:06,960 --> 00:51:10,440
2000 plus contributors And when 
you say meaningful, what do you 

961
00:51:10,440 --> 00:51:12,160
mean? 
Like how do you define 

962
00:51:12,160 --> 00:51:14,680
meaningful right? 
Yeah, the the tricky part was to

963
00:51:14,680 --> 00:51:18,320
understand that it's meaningful 
in the context of intellectual 

964
00:51:18,320 --> 00:51:20,760
property and not from the point 
of view of software engineering.

965
00:51:21,800 --> 00:51:26,680
So if you had for example, in 
the grammar, there is a piece 

966
00:51:27,040 --> 00:51:29,040
called this is like a string. 
It looks like a bit like a 

967
00:51:29,040 --> 00:51:30,880
regular expression. 
So imagine you have a regular 

968
00:51:30,880 --> 00:51:34,000
expression that's like page 
long. 

969
00:51:34,680 --> 00:51:38,760
Somebody added question mark. 
It's a very specific point to 

970
00:51:38,760 --> 00:51:42,760
fix an issue. 
You as a software engineer, you 

971
00:51:42,760 --> 00:51:45,360
look at that and well, you know,
it's A1 character change. 

972
00:51:46,280 --> 00:51:49,320
At the same time, you know, it 
has probably hasn't been easy, 

973
00:51:49,320 --> 00:51:51,880
you know, to figure out that 
from the problem you had 

974
00:51:52,280 --> 00:51:56,120
distillate to a test and then 
eventually figure out that that 

975
00:51:56,160 --> 00:51:59,200
one character was missing 
precisely that point. 

976
00:51:59,600 --> 00:52:03,760
So a lot of work behind that 
patch, but from an intellectual 

977
00:52:03,760 --> 00:52:06,640
property point of view, it's 
just one character, doesn't 

978
00:52:06,640 --> 00:52:09,720
matter. 
On the other hand, if somebody 

979
00:52:09,720 --> 00:52:14,000
would fix something trivial, 
just a one liner in 

980
00:52:14,000 --> 00:52:17,120
implementation. 
But now a rule we have is every 

981
00:52:17,120 --> 00:52:20,520
contribution needs to be covered
by a test of Congress for that 

982
00:52:20,520 --> 00:52:23,200
for future regressions so that 
you can say if it's fixed then 

983
00:52:23,200 --> 00:52:26,440
it will never happen again. 
So even if somebody would 

984
00:52:26,440 --> 00:52:29,040
contribute a fix, which is one 
line would ask, well, you had a 

985
00:52:29,040 --> 00:52:32,200
test for it and now the test 
would have an entity. 

986
00:52:33,000 --> 00:52:35,520
The entity needs to have a name.
So somebody would just have a 

987
00:52:35,520 --> 00:52:37,440
person. 
Somebody would say animal, 

988
00:52:38,320 --> 00:52:40,560
somebody would come up with 
something new. 

989
00:52:41,040 --> 00:52:44,040
There's creativity in that that 
is meaningful. 

990
00:52:44,160 --> 00:52:45,800
Wow. 
Even if it's a very trivial 

991
00:52:45,800 --> 00:52:48,600
test, which is probably copied 
like the the same template and 

992
00:52:48,600 --> 00:52:50,360
the same pattern for many, many 
other things. 

993
00:52:50,880 --> 00:52:52,800
So you need to understand this 
difference. 

994
00:52:53,280 --> 00:52:56,840
When you mention about that, I 
mean, it reminded me with all 

995
00:52:56,840 --> 00:53:00,000
this AI now, right? 
Because somebody could generate 

996
00:53:00,000 --> 00:53:03,440
tests very easily with AI and 
now this becomes blurry, right? 

997
00:53:03,440 --> 00:53:07,440
Is it meaningful because, you 
know, a machine actually 

998
00:53:07,800 --> 00:53:11,320
generated that? 
Like in your maybe open source 

999
00:53:11,320 --> 00:53:15,440
experience, have you seen a lot 
of increased contributors that 

1000
00:53:15,440 --> 00:53:19,400
actually leverage AI? 
And what are the reactions of 

1001
00:53:19,400 --> 00:53:22,600
the core open source community 
towards, you know, AI? 

1002
00:53:22,600 --> 00:53:25,760
Because on one hand, sometimes 
it works, right? 

1003
00:53:25,800 --> 00:53:28,960
But most of the time also the 
design might not be optimal and 

1004
00:53:28,960 --> 00:53:32,400
maybe italicinates a little bit.
Or is it fringe some copyright 

1005
00:53:32,400 --> 00:53:35,240
from some other libraries that 
it copies, like you don't know 

1006
00:53:35,440 --> 00:53:36,960
from where? 
So how do you? 

1007
00:53:37,400 --> 00:53:38,720
What's your take about all 
these? 

1008
00:53:39,560 --> 00:53:42,680
It's very difficult to say if 
somebody use the eye, yeah. 

1009
00:53:42,680 --> 00:53:49,120
So we do see an increase in 
contributions, but I mean, 

1010
00:53:49,360 --> 00:53:52,600
Quarkus didn't exist six years 
ago and we have 1000 

1011
00:53:52,600 --> 00:53:54,200
contributors in Quarkus 
nowadays. 

1012
00:53:54,440 --> 00:53:58,280
So it's really skyrocketing the 
interest, but also the amount of

1013
00:53:58,280 --> 00:54:01,480
contributions in there, it's 
growing significantly. 

1014
00:54:01,920 --> 00:54:04,680
I wouldn't know if it's AI, 
right? 

1015
00:54:05,040 --> 00:54:07,720
I would guess there is very, 
very little AI there. 

1016
00:54:07,720 --> 00:54:11,840
There might be some, but I, I 
suspect actually normally that's

1017
00:54:11,840 --> 00:54:15,360
my suspicion, right. 
But if I need to create a bash 

1018
00:54:15,360 --> 00:54:18,840
script, which is say copying 
some things from one to the 

1019
00:54:18,840 --> 00:54:21,880
other, I've seen that AI is very
helpful with that because I'm a 

1020
00:54:21,880 --> 00:54:24,520
little bit out of my territory. 
I know how to write mesh 

1021
00:54:24,520 --> 00:54:28,040
scripts, but I don't remember 
some of the details. 

1022
00:54:28,040 --> 00:54:32,040
So I need to like how is the 
equality sign again for 

1023
00:54:32,040 --> 00:54:35,240
variables, integers, I don't 
remember those things. 

1024
00:54:35,720 --> 00:54:37,880
So I use an AI for that. 
It helps me. 

1025
00:54:38,040 --> 00:54:41,120
I can check, Oh yeah, that's 
what I needed to services some 

1026
00:54:41,120 --> 00:54:43,360
memories and you try it out, 
works. 

1027
00:54:44,000 --> 00:54:46,960
But when it comes to Java code, 
it never did the right thing. 

1028
00:54:48,000 --> 00:54:50,880
Never. 
And I think it's because the 

1029
00:54:50,880 --> 00:54:55,960
kind of work we do is always 
kind of novel in a particular 

1030
00:54:56,040 --> 00:54:59,480
strange space, right? 
I'm not using Hibernate or 

1031
00:54:59,480 --> 00:55:02,440
creating a new entity, which 
would potentially be a very 

1032
00:55:02,440 --> 00:55:04,920
repetitive thing that requires 
maybe domain knowledge, right? 

1033
00:55:04,920 --> 00:55:07,480
Maybe you are in a medical 
field, you know exactly what 

1034
00:55:07,480 --> 00:55:10,920
kind of proteins you need to do 
here and therefore you you map 

1035
00:55:10,920 --> 00:55:14,560
that and putting the annotation 
on there and the properties is a

1036
00:55:14,560 --> 00:55:16,560
boring thing that I can help you
with. 

1037
00:55:17,280 --> 00:55:21,280
The kind of puzzles we solve are
a bit of a different league. 

1038
00:55:22,320 --> 00:55:25,560
So you have worked with so many 
contributors, maybe tell us what

1039
00:55:25,560 --> 00:55:28,520
are your biggest challenges 
working in such a big, you know,

1040
00:55:28,640 --> 00:55:31,480
open source project? 
There was a time in which I 

1041
00:55:31,480 --> 00:55:33,720
tried to follow all the 
discussions. 

1042
00:55:34,120 --> 00:55:41,000
I no longer do that. 
It's, it's important to have 

1043
00:55:41,240 --> 00:55:45,320
subgroups and a lot of trust in 
the other people. 

1044
00:55:45,320 --> 00:55:49,240
So I know there are areas that 
are being watched by the 

1045
00:55:49,520 --> 00:55:54,680
colleagues, friends, external 
contributors that I trust and I 

1046
00:55:54,680 --> 00:55:59,560
really, really trust them. 
I also know that if they needed 

1047
00:55:59,560 --> 00:56:03,360
me, they would come to me. 
And so I don't have to go and 

1048
00:56:03,360 --> 00:56:05,360
read. 
That has been overwhelming. 

1049
00:56:06,360 --> 00:56:10,160
That does work. 
I'm quite curious, is there such

1050
00:56:10,160 --> 00:56:12,800
thing as politics in open source
project? 

1051
00:56:12,800 --> 00:56:16,000
Because as you have numbers of 
people right, maybe some people 

1052
00:56:16,440 --> 00:56:18,800
have a strong opinions, they 
gather influence. 

1053
00:56:18,800 --> 00:56:21,800
Is there such a thing? 
Because I've never been involved

1054
00:56:21,800 --> 00:56:23,320
in such a big open source 
project. 

1055
00:56:23,520 --> 00:56:26,800
I'm just wondering because this 
has to happen in any kind of big

1056
00:56:26,800 --> 00:56:28,760
organizations. 
I think there is. 

1057
00:56:29,080 --> 00:56:32,120
I wouldn't say if it's politics,
but there certainly are strong 

1058
00:56:32,120 --> 00:56:35,880
opinions. 
Very often they come from 

1059
00:56:36,200 --> 00:56:40,800
misunderstandings. 
But also, you know, some 

1060
00:56:40,800 --> 00:56:44,800
discussions are happening in a 
chat maybe, and you are typing a

1061
00:56:44,800 --> 00:56:46,760
response before having read the 
other one. 

1062
00:56:46,760 --> 00:56:48,360
People start interleaving 
things. 

1063
00:56:48,360 --> 00:56:51,200
They go on a tangent, right? 
And then there is a significant 

1064
00:56:51,200 --> 00:56:54,680
misunderstanding sometimes. 
And now if I, if you didn't 

1065
00:56:54,680 --> 00:56:57,600
understand the problem and then 
I'm really sure that this is the

1066
00:56:57,600 --> 00:57:01,960
solution and the other person is
like, you're an idiot, then that

1067
00:57:01,960 --> 00:57:03,720
that doesn't solve my problem at
all, right? 

1068
00:57:04,480 --> 00:57:06,480
So, yeah, these things, these 
things happen. 

1069
00:57:07,240 --> 00:57:12,240
I've never seen people being 
intentionally going in the 

1070
00:57:12,240 --> 00:57:14,440
wrong, you know, or trying to 
mislead others. 

1071
00:57:14,440 --> 00:57:16,840
Like everybody's coming in very 
good faith, right? 

1072
00:57:17,440 --> 00:57:21,480
And so when there is something, 
some tension growing, it's 

1073
00:57:21,480 --> 00:57:25,280
always a misunderstanding. 
But also, you know, emotions, 

1074
00:57:25,320 --> 00:57:29,160
though, they don't come across 
really well in written form. 

1075
00:57:29,760 --> 00:57:33,560
Also, it's also for engineers, 
they might have a bit of empathy

1076
00:57:33,560 --> 00:57:35,240
problems. 
And it's extremely 

1077
00:57:35,240 --> 00:57:37,520
international. 
So culturally, the expressions 

1078
00:57:37,800 --> 00:57:40,280
might not translate really well 
or translate in a wrong way. 

1079
00:57:40,280 --> 00:57:43,040
And then you know that amplifies
some problems. 

1080
00:57:43,680 --> 00:57:45,720
Right. 
So, yeah, I think I'm always 

1081
00:57:45,720 --> 00:57:48,760
amazed, you know, like in open 
source project, especially with 

1082
00:57:48,760 --> 00:57:51,520
this many contributors, people 
may not meet each other, right? 

1083
00:57:51,520 --> 00:57:54,560
They may not know each other, 
but they can build like such a 

1084
00:57:54,840 --> 00:57:59,400
good software, you know, like 
that works and serves more 

1085
00:57:59,400 --> 00:58:02,320
people than just the 
contributors themselves, right? 

1086
00:58:02,840 --> 00:58:05,920
It's always amazing for me and 
kind of like the pickup rate of 

1087
00:58:05,920 --> 00:58:09,000
open source maybe in the past 20
years has been a lot, right? 

1088
00:58:09,000 --> 00:58:12,720
Like so many companies these 
days will just adopt open 

1089
00:58:12,720 --> 00:58:14,640
source. 
Before when I started my career,

1090
00:58:14,840 --> 00:58:17,680
it's always a problem, OK, you 
cannot use this open source. 

1091
00:58:17,680 --> 00:58:20,120
You have to go through, I don't 
know, an enterprise architect 

1092
00:58:20,120 --> 00:58:23,560
board to approve a certain 
version of open source. 

1093
00:58:23,560 --> 00:58:26,840
But these days, I'm sure like 
almost all software engineers, 

1094
00:58:27,120 --> 00:58:29,560
we'll just use open source 
because it's so big with this 

1095
00:58:29,560 --> 00:58:31,760
and so made life so much easier,
right? 

1096
00:58:32,560 --> 00:58:35,320
So one aspect of open source 
that is becoming a challenge 

1097
00:58:35,320 --> 00:58:39,440
these days about security. 
We have seen many threat actor 

1098
00:58:39,440 --> 00:58:43,480
trying to be a contributor, make
some changes that actually is, 

1099
00:58:44,200 --> 00:58:47,520
you know, security threat. 
How do you actually identify 

1100
00:58:47,520 --> 00:58:52,920
this detect and maybe protect 
your open source from such, you 

1101
00:58:52,920 --> 00:58:55,560
know, threat actor? 
Yeah, that was certainly a wake 

1102
00:58:55,560 --> 00:59:00,240
up call. 
We used to give say commit 

1103
00:59:00,240 --> 00:59:04,000
access quite easily. 
Yeah, I wouldn't say too easily,

1104
00:59:04,440 --> 00:59:08,520
but if you had been around for 
let's say six months and done 

1105
00:59:08,520 --> 00:59:12,560
some good work, I would give you
commit access nowadays. 

1106
00:59:12,560 --> 00:59:17,280
I am, I'm not saying I'm going 
to do a background check, but 

1107
00:59:17,520 --> 00:59:21,360
kind of like I want to know what
kind of person dealing with and 

1108
00:59:22,080 --> 00:59:24,880
the whole, the whole life cycle 
and management of projects 

1109
00:59:24,880 --> 00:59:28,080
changed a bit. 
Like in some projects, we really

1110
00:59:28,080 --> 00:59:31,960
just really restrict the 
permissions to the bare minimum.

1111
00:59:32,360 --> 00:59:35,400
This might seem a bit unfair and
we're trying to compensate the 

1112
00:59:35,400 --> 00:59:38,320
fairness now with, you know, a 
bit of an open governance that 

1113
00:59:38,320 --> 00:59:41,720
is great writing down rules of 
like, how do you join the 

1114
00:59:41,720 --> 00:59:44,080
project and what are the 
expectations? 

1115
00:59:44,080 --> 00:59:45,560
It's not clearly written down, 
right? 

1116
00:59:45,560 --> 00:59:47,400
So that there is a level of 
fairness. 

1117
00:59:47,720 --> 00:59:50,960
It's difficult to write down 
those rules because you we need 

1118
00:59:51,160 --> 00:59:53,800
to think about them. 
How, how does this work, right? 

1119
00:59:53,800 --> 00:59:55,440
And it's kind of a novel 
territory there. 

1120
00:59:56,080 --> 00:59:58,480
But yeah, there there was a time
in which it would have been 

1121
00:59:58,480 --> 01:00:00,760
fairly easy to get commit 
access. 

1122
01:00:00,760 --> 01:00:05,200
But even then we always review 
each other's codes. 

1123
01:00:05,200 --> 01:00:08,600
So the way you know, GitHub 
rules are set up, CIA set up, 

1124
01:00:08,640 --> 01:00:11,880
and we really do expect that 
even if I may want to make a 

1125
01:00:11,880 --> 01:00:14,360
change, like I said, the request
tell somebody else is going to 

1126
01:00:14,360 --> 01:00:15,720
review it and then it gets 
merged. 

1127
01:00:16,280 --> 01:00:17,760
And there is a lot of automation
there. 

1128
01:00:17,840 --> 01:00:20,920
Some of my colleagues so they 
created a very nice framework to

1129
01:00:21,120 --> 01:00:25,520
create a GitHub bots so. 
Any time there is a need of 

1130
01:00:25,520 --> 01:00:29,760
making changes there, there is 
new strip thingy starting and 

1131
01:00:29,760 --> 01:00:32,080
helping. 
So it's kind of easy to also 

1132
01:00:32,080 --> 01:00:36,680
enforce roles like this. 
Also with git, when I start my 

1133
01:00:36,680 --> 01:00:40,440
work I fetch changes with look 
at them. 

1134
01:00:41,040 --> 01:00:43,880
I might miss something for it. 
Yeah, that's the risk. 

1135
01:00:45,040 --> 01:00:49,000
So, yeah, again, like these 
security issues really is very 

1136
01:00:49,000 --> 01:00:51,720
hard and especially we have 
heard so many, especially maybe 

1137
01:00:51,720 --> 01:00:55,600
in the JavaScript world, because
when you pull package, you pull 

1138
01:00:55,600 --> 01:00:59,480
maybe 10 or more dependencies. 
Sometimes it's just a small 

1139
01:00:59,880 --> 01:01:03,920
library that you think it's 
insignificant, but it could be, 

1140
01:01:03,920 --> 01:01:07,320
you know, changed by some 
hackers or whatever that is such

1141
01:01:07,360 --> 01:01:09,720
that you're using vulnerable 
libraries, right? 

1142
01:01:09,720 --> 01:01:13,320
So I think, again, open source 
can be a threat sometimes, 

1143
01:01:13,520 --> 01:01:16,360
especially these days. 
And I was having chat in some of

1144
01:01:16,360 --> 01:01:18,560
the episodes as well. 
Like when you create an 

1145
01:01:18,560 --> 01:01:21,960
application, 90% of what you're 
running. 

1146
01:01:22,560 --> 01:01:25,000
It's. 
Actually open source software. 

1147
01:01:25,720 --> 01:01:30,160
So yeah, like you really don't 
know how come the code gets 

1148
01:01:30,160 --> 01:01:33,240
generated that way, right? 
What kind of things that it does

1149
01:01:33,240 --> 01:01:35,920
on the background. 
So I think, yeah, maybe one 

1150
01:01:35,920 --> 01:01:39,040
challenge there for people to 
actually also identify 

1151
01:01:39,040 --> 01:01:42,880
vulnerabilities as you pull new 
versions or new changes in the. 

1152
01:01:43,280 --> 01:01:46,320
In the yeah, well we're 
certainly looking at it much 

1153
01:01:46,320 --> 01:01:48,280
more carefully. 
Like one thing we're working on 

1154
01:01:48,280 --> 01:01:49,680
now is like a reproducible 
bills. 

1155
01:01:49,680 --> 01:01:52,000
We want to make sure that the 
bills are reproducible. 

1156
01:01:52,000 --> 01:01:54,600
That helps, you know certify 
origin of things. 

1157
01:01:55,240 --> 01:01:57,760
It's going to be mandatory for 
red dot products and projects. 

1158
01:01:57,760 --> 01:02:01,560
I believe it is already maybe 
sorry not very involved in those

1159
01:02:01,560 --> 01:02:04,240
areas, but there are certainly a
lot of attention, right. 

1160
01:02:04,880 --> 01:02:08,640
For example, anything like you 
know, Red dot supports product 

1161
01:02:08,640 --> 01:02:11,600
versions of our projects and 
that's why they employ us. 

1162
01:02:11,680 --> 01:02:13,480
They sponsor the project pretty 
much, right. 

1163
01:02:14,160 --> 01:02:17,920
But what they do is like they do
rebuild the entire thing in a 

1164
01:02:17,920 --> 01:02:22,120
closed adapt environment before 
it's being sent to customers and

1165
01:02:22,120 --> 01:02:25,040
they have a lot of additional 
checks and controls at that 

1166
01:02:25,040 --> 01:02:28,640
level. 
Of course, that happens after 

1167
01:02:28,680 --> 01:02:32,640
our upstream work. 
So some things that we would 

1168
01:02:32,640 --> 01:02:35,760
like to do really is to improve 
the upstream project as well. 

1169
01:02:35,880 --> 01:02:39,200
It's not just responsibility of 
red dot, it's a responsibility 

1170
01:02:39,240 --> 01:02:41,920
of how the open source project 
is set up. 

1171
01:02:42,920 --> 01:02:46,080
And well, one of the things 
we're doing now is we're 

1172
01:02:46,080 --> 01:02:48,640
actually donating the entire 
Hibernate code base and 

1173
01:02:48,640 --> 01:02:50,760
intellectual property to an open
source format. 

1174
01:02:51,560 --> 01:02:55,440
This is literally to signal that
this is not just red dots 

1175
01:02:55,440 --> 01:02:58,480
responsibility, right? 
We do have many contributors 

1176
01:02:58,600 --> 01:03:01,080
from other companies, especially
like database vendors. 

1177
01:03:01,640 --> 01:03:04,800
They really like that Hibernate 
supports all their exotic 

1178
01:03:04,800 --> 01:03:07,520
features, including features of 
database versions that have not 

1179
01:03:07,520 --> 01:03:10,240
been released yet. 
Initially those conversations 

1180
01:03:10,240 --> 01:03:13,000
were a bit funny and like they 
wanted to pay us to implement 

1181
01:03:13,000 --> 01:03:16,480
things that we weren't allowed 
to know about unless we signed 

1182
01:03:16,480 --> 01:03:19,360
an NDA. 
And but we're not going to sign 

1183
01:03:19,360 --> 01:03:22,200
an NDA with like Oracle or 
things like that when we're 

1184
01:03:22,200 --> 01:03:24,360
employed forever. 
And it gets all very tricky. 

1185
01:03:25,440 --> 01:03:28,880
So they all these other 
companies, they do stuff people 

1186
01:03:29,000 --> 01:03:31,880
that work with us on fiber code 
base. 

1187
01:03:32,840 --> 01:03:35,480
And we really want to make sure 
that that happens more 

1188
01:03:35,480 --> 01:03:38,400
frequently. 
It's really nice for us and for 

1189
01:03:38,480 --> 01:03:42,520
projects to have more companies 
involved in projects. 

1190
01:03:42,920 --> 01:03:45,960
So for that, these projects are 
being donated to a common house 

1191
01:03:45,960 --> 01:03:49,240
foundation, which is a very 
young new foundation. 

1192
01:03:49,760 --> 01:03:53,040
We did explore like the Eclipse 
Foundation, the Abashi 

1193
01:03:53,040 --> 01:03:56,240
Foundation. 
They're all fine and great for 

1194
01:03:56,400 --> 01:03:58,200
some projects, particular 
projects. 

1195
01:03:58,320 --> 01:04:02,680
But for a mature framework or 
mature library like Hibernate, 

1196
01:04:02,880 --> 01:04:07,600
in which we already have our way
of working our CIS, our system 

1197
01:04:07,600 --> 01:04:11,000
being by getting in the Apache 
would have been problematic. 

1198
01:04:11,000 --> 01:04:14,400
You need to migrate our ticket 
system, our mailing list, and 

1199
01:04:14,880 --> 01:04:17,360
it's a lot of work. 
They also have a lot of other 

1200
01:04:17,360 --> 01:04:18,960
rules that we don't necessarily 
like. 

1201
01:04:18,960 --> 01:04:21,400
We have an established process 
which we think works fairly 

1202
01:04:21,400 --> 01:04:22,800
well, like we have experience as
well. 

1203
01:04:23,920 --> 01:04:27,160
So common house gives us a bit 
more flexibility in that sense. 

1204
01:04:27,440 --> 01:04:30,840
So yes, going to common house 
and yeah, we really hope that 

1205
01:04:30,840 --> 01:04:36,160
that's triggers them more 
companies to not only contribute

1206
01:04:36,640 --> 01:04:41,000
but also steal it and lead it. 
This is all entirely in hands of

1207
01:04:41,000 --> 01:04:44,160
Red Hat engineers nowadays. 
Just totally fine. 

1208
01:04:44,160 --> 01:04:48,120
But, you know, more diversity 
there would be really nice. 

1209
01:04:49,320 --> 01:04:52,600
So if you are allowed right to 
talk about, so you've been in 

1210
01:04:52,600 --> 01:04:55,920
Red Hat for like 16 years and 
throughout this time there's so 

1211
01:04:55,920 --> 01:05:00,120
many changes, series of 
acquisition, series of license, 

1212
01:05:00,120 --> 01:05:01,840
probably changes for some of 
those. 

1213
01:05:02,440 --> 01:05:07,160
So tell us how Red Hat you know 
is going to advance in the next 

1214
01:05:07,160 --> 01:05:09,560
few years, right? 
Where do you see the next big 

1215
01:05:09,560 --> 01:05:11,000
thing that would come from? 
Red Hat? 

1216
01:05:11,640 --> 01:05:15,960
We just had very big news. 
It's very big for us, probably 

1217
01:05:16,160 --> 01:05:19,680
hope meaningless for everybody 
else, but our entire group is 

1218
01:05:19,680 --> 01:05:23,960
being moved to IBM. 
So we will no longer be under 

1219
01:05:23,960 --> 01:05:28,280
red ads, but under IBM. 
The things they promised was the

1220
01:05:28,280 --> 01:05:31,720
reasons they gave us seem very 
positive, like it seems like a 

1221
01:05:31,720 --> 01:05:35,160
really good idea. 
IBM has always had a very large 

1222
01:05:35,760 --> 01:05:40,200
team working on a lot of Java 
things, including a lot of open 

1223
01:05:40,200 --> 01:05:44,560
source Java projects. 
And so we're even not even 

1224
01:05:44,560 --> 01:05:47,120
joining the team. 
We're going to be side to side 

1225
01:05:47,120 --> 01:05:50,640
with them, but I expect a lot 
more collaboration with those 

1226
01:05:50,640 --> 01:05:52,800
guys. 
So that's great. 

1227
01:05:53,520 --> 01:05:56,840
We do have concerns about the 
open source commitment because 

1228
01:05:56,840 --> 01:06:00,520
like in Red dot it's very easy. 
Like we, as I said before in our

1229
01:06:00,520 --> 01:06:02,680
employment contracts, we have 
this thing that you're allowed 

1230
01:06:02,680 --> 01:06:05,800
to contribute to anything. 
IBM has been very reassuring 

1231
01:06:05,800 --> 01:06:08,400
about us, like they clearly 
don't want to lose us and they 

1232
01:06:08,440 --> 01:06:10,520
want us to keep working the way 
we are. 

1233
01:06:11,160 --> 01:06:15,720
We are used to work, so probably
nothing is going to change, but 

1234
01:06:15,760 --> 01:06:20,000
for us this is a bit surprising.
Yeah. 

1235
01:06:20,000 --> 01:06:22,280
I can't answer your question 
about where Red Hat is going 

1236
01:06:22,280 --> 01:06:27,240
because we won't even. 
Be there for such a big name, 

1237
01:06:27,240 --> 01:06:30,720
you know, Red Hat has been in 
the open source from the Linux 

1238
01:06:30,720 --> 01:06:32,960
and maybe maybe many other 
projects like Hibernate. 

1239
01:06:32,960 --> 01:06:35,400
I think that's really a big 
contribution and hopefully you 

1240
01:06:35,400 --> 01:06:38,920
guys can continue all this great
work and, you know, support the 

1241
01:06:38,920 --> 01:06:41,880
community. 
So Sunny, as we reach the end of

1242
01:06:41,880 --> 01:06:44,560
our conversation, I have one 
last question before I let you 

1243
01:06:44,560 --> 01:06:46,480
go. 
I call this the tree technical 

1244
01:06:46,480 --> 01:06:49,280
leadership wisdom, but you can 
think of it simply just like 

1245
01:06:49,280 --> 01:06:50,960
advice that you want to give to 
the listeners. 

1246
01:06:51,320 --> 01:06:53,680
Maybe you can share some of your
advice for us. 

1247
01:06:54,080 --> 01:06:56,360
Yeah, this is the tricky 
question. 

1248
01:06:57,800 --> 01:06:59,600
I thought about like the most 
important one. 

1249
01:07:00,000 --> 01:07:03,440
I realized this was actually 
advice given to me some years 

1250
01:07:03,440 --> 01:07:05,280
ago. 
It took me a while to implement 

1251
01:07:05,280 --> 01:07:08,720
or realize how important it is. 
But I think it's very important 

1252
01:07:08,960 --> 01:07:11,960
to make yourself replaceable 
aggressively. 

1253
01:07:12,640 --> 01:07:15,680
So I think many of us see it 
working in this space the way 

1254
01:07:15,680 --> 01:07:18,760
you might suffer from, you know,
imposter syndrome, right? 

1255
01:07:18,760 --> 01:07:22,680
Oh, I got here out of luck, but 
I don't really know as much as 

1256
01:07:22,680 --> 01:07:24,440
all these other smart people. 
I'm working, right. 

1257
01:07:25,080 --> 01:07:29,640
So you kind of tend to make 
yourself valuable so that you 

1258
01:07:29,640 --> 01:07:32,160
are kind of reassured that 
you're not going to be removed 

1259
01:07:32,320 --> 01:07:35,240
next week. 
Right now, I have been working 

1260
01:07:35,240 --> 01:07:36,680
on Hibernate for a very long 
time. 

1261
01:07:36,880 --> 01:07:39,200
And then, you know, we created 
Quarkus and then I was involved 

1262
01:07:39,200 --> 01:07:43,440
in Quarkus and in Hibernate and 
I was the architect for 

1263
01:07:43,440 --> 01:07:46,600
Hibernate team, which means also
like interfacing with all the 

1264
01:07:46,600 --> 01:07:49,480
other products that have to do 
something with Hibernate or 

1265
01:07:49,640 --> 01:07:53,120
integrate with it or and know 
about, you know, life cycle 

1266
01:07:53,120 --> 01:07:54,960
versions. 
How long are you working 

1267
01:07:55,800 --> 01:08:01,480
supporting this other branch? 
Lots of discussions and it was 

1268
01:08:01,480 --> 01:08:06,280
just way too much. 
I love these projects, so I 

1269
01:08:06,280 --> 01:08:12,200
could not just quit any of them 
because I felt that some things 

1270
01:08:12,200 --> 01:08:15,240
were unfinished and were not 
clear or like some other people 

1271
01:08:15,240 --> 01:08:18,240
were not in a, the right 
position to replace me. 

1272
01:08:18,760 --> 01:08:23,240
And that was actually a problem.
So I've been mentoring Joran 

1273
01:08:23,240 --> 01:08:25,479
Rodier now. 
It's extremely brilliant 

1274
01:08:25,479 --> 01:08:28,479
engineer in France and he's, he 
took over already. 

1275
01:08:28,479 --> 01:08:31,439
I have since last October, I 
believe the role of Hibernate 

1276
01:08:31,439 --> 01:08:34,560
architect. 
So I'm no longer official in 

1277
01:08:35,120 --> 01:08:37,800
that's who I'm mentoring him. 
So I'm still kind of in the 

1278
01:08:37,800 --> 01:08:39,800
picture and I'm still working on
Hibernate, right. 

1279
01:08:40,399 --> 01:08:45,240
But I really realize that it's 
important to make sure that I'm 

1280
01:08:45,240 --> 01:08:48,040
not indispensable. 
I had to go on paternal leave. 

1281
01:08:48,240 --> 01:08:51,800
And so I was literally, you 
know, not having sleep for four 

1282
01:08:51,800 --> 01:08:53,920
months. 
You, it's not good for the 

1283
01:08:53,920 --> 01:08:56,080
project if something like that 
happens. 

1284
01:08:56,080 --> 01:08:58,399
And you are not irreplaceable, 
right? 

1285
01:08:58,920 --> 01:09:04,319
So it also prevented me from 
expanding and, like, diving deep

1286
01:09:04,319 --> 01:09:07,200
into other important 
opportunities within these 

1287
01:09:07,200 --> 01:09:09,520
projects, right? 
Yeah, this is done now. 

1288
01:09:09,960 --> 01:09:12,920
I think we're all in a better 
position because also out of 

1289
01:09:12,920 --> 01:09:15,279
respect for the project, the 
other people, they were not 

1290
01:09:15,279 --> 01:09:18,040
getting the attention they 
needed or the direction they 

1291
01:09:18,040 --> 01:09:21,000
needed. 
Now that I have him and it's us.

1292
01:09:21,720 --> 01:09:25,800
So yeah, making yourself 
indispensable a big mistake. 

1293
01:09:26,200 --> 01:09:31,359
But that's what's big time. 
And in the same space, I'm 

1294
01:09:31,359 --> 01:09:35,920
thinking of interviews like. 
So I've been a trader for a very

1295
01:09:35,920 --> 01:09:38,840
long time. 
And another funny thing is most 

1296
01:09:38,840 --> 01:09:41,560
of my colleagues, I've been the 
same for all those years. 

1297
01:09:41,560 --> 01:09:46,200
And I even had like the same 
manager for I think like 14 

1298
01:09:46,200 --> 01:09:49,720
years and he didn't even quit. 
He retired at some point. 

1299
01:09:49,720 --> 01:09:52,520
Because, you know, all this 
long, I realized in the 

1300
01:09:52,520 --> 01:09:54,400
industry, this is really, really
unusual. 

1301
01:09:54,720 --> 01:09:57,800
And for many, many years, I also
did not interview anywhere else 

1302
01:09:58,320 --> 01:09:59,720
because, you know, you love the 
project. 

1303
01:09:59,880 --> 01:10:04,320
You, we have a fantastic team. 
And so, you know, going and 

1304
01:10:04,440 --> 01:10:06,800
answer to a recruiter or 
somebody feels a bit like a 

1305
01:10:06,800 --> 01:10:11,120
betrayal of your best friends or
your life, baby, right. 

1306
01:10:11,800 --> 01:10:13,200
I think that was a mistake as 
well. 

1307
01:10:13,400 --> 01:10:19,560
I, I did some more interviews in
recent years and doing them, it 

1308
01:10:19,560 --> 01:10:22,800
helps or better understand my 
own value. 

1309
01:10:23,000 --> 01:10:25,920
And then therefore, you know, 
you get those very interesting 

1310
01:10:25,920 --> 01:10:28,080
offers. 
It builds up my confidence. 

1311
01:10:28,720 --> 01:10:31,560
And that helps, again, to fight 
imposter syndrome. 

1312
01:10:31,560 --> 01:10:35,960
And that helps to realize that, 
you know, that the way you're 

1313
01:10:35,960 --> 01:10:38,920
working is valuable. 
It's valued by the others, and 

1314
01:10:38,920 --> 01:10:40,600
it just helps make you a better 
reader. 

1315
01:10:41,760 --> 01:10:45,040
I never learned because, you 
know, yeah, you'll get maybe the

1316
01:10:45,040 --> 01:10:47,960
offer. 
It's assuring to know that if 

1317
01:10:47,960 --> 01:10:51,240
you left here, there are other 
opportunities, but then you 

1318
01:10:51,240 --> 01:10:56,520
still reflect like, well, I, I 
like this one should, but but 

1319
01:10:56,520 --> 01:10:59,920
it's still something that I even
suggest my colleagues, you know,

1320
01:11:00,000 --> 01:11:02,160
do some interviews. 
Sometimes it's good and then, 

1321
01:11:02,160 --> 01:11:04,560
you know, we talked about it and
the worst case, you, you're 

1322
01:11:05,280 --> 01:11:10,960
going to need a raise to stay. 
It's also not bad to truly 

1323
01:11:10,960 --> 01:11:14,760
listen to the others. 
Like one thing as a leader, 

1324
01:11:14,760 --> 01:11:18,000
especially in these groups know 
if that always resonates to me. 

1325
01:11:18,000 --> 01:11:22,040
The six in the aerospace 
industry, they noted that most 

1326
01:11:22,040 --> 01:11:26,400
accidents have when you know, 
you have two pilots in an 

1327
01:11:26,400 --> 01:11:30,360
airplane, it's much more likely 
that an accident happens when 

1328
01:11:30,360 --> 01:11:34,600
the senior pilot is piloting 
because the other guy that's you

1329
01:11:34,600 --> 01:11:39,440
know, they monitor each other. 
The junior one is less likely to

1330
01:11:39,440 --> 01:11:44,680
speak up or if he does, he might
not be respected in his opinion.

1331
01:11:45,360 --> 01:11:49,480
That really struck with me and I
think it applies also a lot in 

1332
01:11:49,480 --> 01:11:52,680
other areas, right? 
Especially the technical things 

1333
01:11:52,680 --> 01:11:55,280
we work on. 
I've seen, you know, indeed all 

1334
01:11:55,280 --> 01:11:57,360
these chats and all these 
misunderstandings that we have. 

1335
01:11:58,120 --> 01:12:01,440
It happens quite often that 
somebody that's very junior or 

1336
01:12:01,440 --> 01:12:04,520
maybe has a very basic 
understanding of our frameworks,

1337
01:12:04,520 --> 01:12:06,920
you know, when external user 
comes to us in the chat and asks

1338
01:12:06,920 --> 01:12:11,360
something, he clearly has many 
misunderstandings or not read 

1339
01:12:11,360 --> 01:12:14,600
something, et cetera. 
And then, you know, his opinions

1340
01:12:14,600 --> 01:12:16,280
get really discarded really 
quickly. 

1341
01:12:16,520 --> 01:12:20,160
And sometimes, you know, many 
times it doesn't have value, 

1342
01:12:20,240 --> 01:12:22,080
right? 
But sometimes there are really 

1343
01:12:22,080 --> 01:12:25,160
important feedbacks in there. 
Also between colleagues, you 

1344
01:12:25,160 --> 01:12:26,480
know, there is a bit of a 
hierarchy. 

1345
01:12:26,480 --> 01:12:29,680
So if you are on top, it's very 
important to listen what the 

1346
01:12:29,680 --> 01:12:32,240
other guys say. 
And well, the opposite of 

1347
01:12:32,240 --> 01:12:37,120
listening truthfully is also 
like, I expect the others to 

1348
01:12:37,120 --> 01:12:39,960
also be truthful in what what 
they say. 

1349
01:12:39,960 --> 01:12:43,880
And this is especially important
now that we all work remotely 

1350
01:12:44,240 --> 01:12:46,600
and that we are far away and we 
don't know each other. 

1351
01:12:46,960 --> 01:12:50,400
The trust that there is between 
the people is so important. 

1352
01:12:50,840 --> 01:12:55,960
I had been blindsided once. 
Like there was one person that 

1353
01:12:56,720 --> 01:13:00,600
lies to me. 
And I realized later that I was 

1354
01:13:00,600 --> 01:13:04,480
like, I was very naive. 
I realized it had been many, 

1355
01:13:04,480 --> 01:13:07,280
many, many years that I've been 
working with lots of smart 

1356
01:13:07,280 --> 01:13:10,280
people and it had never happened
to me, right? 

1357
01:13:10,280 --> 01:13:14,280
So I completely am in working in
a world in which the technical 

1358
01:13:14,280 --> 01:13:18,280
excellence is really reached by 
the fact that these people are 

1359
01:13:18,280 --> 01:13:22,680
very honest about what they see,
what they are proceeding and all

1360
01:13:22,680 --> 01:13:25,000
that. 
So I feel like it's when 

1361
01:13:25,000 --> 01:13:28,600
something doesn't, you know, you
didn't do something that you had

1362
01:13:28,600 --> 01:13:31,080
to do. 
I really value that people are 

1363
01:13:31,080 --> 01:13:32,880
very honest about what it is 
like. 

1364
01:13:33,040 --> 01:13:37,000
It's much better to hear that 
you didn't do it because 

1365
01:13:37,000 --> 01:13:40,640
yesterday you had other things 
on your mind and you didn't feel

1366
01:13:40,640 --> 01:13:43,800
like working. 
And that builds a much stronger 

1367
01:13:43,800 --> 01:13:45,560
relation. 
Then, you know, you you might 

1368
01:13:45,560 --> 01:13:48,600
need some slack or you might 
have a motivation issue. 

1369
01:13:48,720 --> 01:13:51,880
And then it's better if you tell
me we can work on that together 

1370
01:13:52,320 --> 01:13:54,520
and that really helps creating a
bonding in long term. 

1371
01:13:54,520 --> 01:13:57,800
But then we see in these teams 
that, you know, they we stayed 

1372
01:13:57,800 --> 01:13:59,920
together for a long time and we 
may create a good things 

1373
01:13:59,920 --> 01:14:00,520
together. 
Yeah. 

1374
01:14:01,640 --> 01:14:05,160
Well, I really love that you 
know, listening and be open, say

1375
01:14:05,160 --> 01:14:08,080
truthful thing, right, the 
psychological safety and you 

1376
01:14:08,080 --> 01:14:10,120
know, some people say. 
That's so that's. 

1377
01:14:10,120 --> 01:14:12,960
Pretty super important. 
So Sunny, thank you so much for 

1378
01:14:12,960 --> 01:14:14,000
coming here. 
Thank you. 

1379
01:14:14,000 --> 01:14:16,080
Again. 
This is our first time doing the

1380
01:14:16,200 --> 01:14:18,560
in person podcast. 
I hope you enjoyed the 

1381
01:14:18,560 --> 01:14:21,520
experience. 
Yeah, good luck with all the 

1382
01:14:21,520 --> 01:14:23,920
open source projects out there. 
So again, thank you for your 

1383
01:14:23,960 --> 01:14:24,760
time. 
Thank you.

