summaryrefslogtreecommitdiff
path: root/blog/utkirna-v1.0.0.html
blob: 9b8dbf505ffd44baae2061e94b122688bda74991 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
<html>
<head>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel='stylesheet' type='text/css' href='style.css'>
<meta property="og:title" content="Utkirna v1.0.0">
<meta property="og:description" content="Initial release of Utkirna">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<title>Ghativega</title>
<style>
img { border: none ;}
</style>
</head>
<body>
<div class="blog-content"><p><a href="index.html">&lt;-- Back to main page</a></p>
<div id="post">
<h2>Utkirna v1.0.0</h2>
<p>Posted on 04/11/2023 12:52:28 AM GMT</p>
<br>
<p>
<img src="assets/images/utkirna.png" alt="app"/>
</p>
<p>
This is the initial release of Utkirna, a cross-platform application heavily inspired from <a href="https://sourceforge.net/projects/win32diskimager/">Win32DiskImager</a> that lets you to write a raw disk image to a removable device or backup a removable device to a raw image file. It is useful for preparing bootable drives with "dd like" images for PC, SBC and embedded development boards as well for backing up such drives.
Utkirna (devanagari: उत्कीर्ण, romanized: Utkīrṇa) means "engraved" in Sanskrit.
</p>

<h3> The reason of its creation</h3>
<p>
I always wanted to created this sort of application for a long time, perhaps ever since <a href="https://etcher.balena.io/">balenaEtcher</a> was a thing as I hated the idea of an electron app which basically mimicks what <code>dd</code> command does while consuming unnecessary amount of memory for doing such a simple task. I am aware that people don't like using <code>dd</code> due to screwing things up easier, but this certainly was not the way. Suprisingly, there are not other cross-platform applications which does similar job to my knowledge even till this day. The only application that I know that was similar to balenaEtcher is Win32DiskImager which obvious by its name, is only for Windows. Hence, this started my interest to develop similar cross-platform application which isn't made using dreaded electron.
</p>

<h3> Development</h3>
<p>
Earlier on, I was planning to use C with <a href="https://github.com/Immediate-Mode-UI/Nuklear">Nuklear</a> (for the UI) for the development. However, as I started experimenting with <a href="https://go.dev/">Go</a>, I realised that it would be more sensible to use this language for desktop applications due to its simplicity yet not losing a lot of performance compared to C. And after discovering about <a href="https://fyne.io/">Fyne</a> a fantastic GUI toolkit, this pretty much sealed the deal for me.
</p>
<p>
To have some kind of idea on how these type of applications worked (on the basis of how it read or write a disk or a raw image file), Win32DiskImager greatly helped me and even clarified me on what sort of libraries would I require to accomplish this task. The only real issue I had was to implement my own Windows interfaces for some IOCTL and FSCTL operations (which is done through <a href="https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-deviceiocontrol">DeviceIoControl</a>) as Go didn't have native support for those (which I am going to upstream someday) but it really wasn't hard to do so.
</p>

<h3> Features</h3>
<p>
In the current state, the program supports:
</p>
<ul>
<li>Reading through a removable disk and saving it as a raw image file.</li>
<li>Writing a raw image file or anything which is "dd compatible" to the disk.</li>
<li>Verification of a raw image through the disk and vice versa.</li>
</ul>

<h3> Installation &amp; Usage</h3>
<p>
Go to the <a href="https://github.com/arnavbhatt288/utkirna">Github repository</a> for further instructions.
</p>
</div>
</main><div class = footer><p>2023 ghativega.in | Powered by <a href="https://pedantic.software/git/blogit/">blogit</a> | <a href="atom.xml">Atom RSS</a></p></div></body></html>